diff options
author | Jonathan Blandford <jrb@redhat.com> | 2004-11-16 05:10:18 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2004-11-16 05:10:18 +0000 |
commit | f0265b018eb07ccaec9c6e73d33711e952f2288b (patch) | |
tree | 5308e89b6c2166b86efd14c60b6b99040514642d /docs/tools | |
parent | b4c4bc894787e88a3e9f73108a9b0b0a747ccfec (diff) | |
download | gdk-pixbuf-f0265b018eb07ccaec9c6e73d33711e952f2288b.tar.gz |
Update so that toplevel windows accomodate for the titlebar when sizing.
Tue Nov 16 00:08:07 2004 Jonathan Blandford <jrb@redhat.com>
* docs/tools/widgets.c: Update so that toplevel windows accomodate
for the titlebar when sizing. Also clean up statusbar
* docs/reference/gtk/images/*png: update
Diffstat (limited to 'docs/tools')
-rw-r--r-- | docs/tools/shooter.c | 1 | ||||
-rw-r--r-- | docs/tools/widgets.c | 152 | ||||
-rw-r--r-- | docs/tools/widgets.h | 9 |
3 files changed, 129 insertions, 33 deletions
diff --git a/docs/tools/shooter.c b/docs/tools/shooter.c index 3c96c7565..75b892bcd 100644 --- a/docs/tools/shooter.c +++ b/docs/tools/shooter.c @@ -212,6 +212,7 @@ int main (int argc, char **argv) gtk_main_iteration (); } sleep (1); + while (gtk_events_pending ()) { gtk_main_iteration (); diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c index 12d7d188f..58c688963 100644 --- a/docs/tools/widgets.c +++ b/docs/tools/widgets.c @@ -1,12 +1,91 @@ #include <gdk/gdkkeysyms.h> +#include <X11/Xatom.h> +#include <gdkx.h> #include "widgets.h" -typedef enum + +#define SMALL_WIDTH 240 +#define SMALL_HEIGHT 75 +#define MEDIUM_WIDTH 240 +#define MEDIUM_HEIGHT 165 +#define LARGE_WIDTH 240 +#define LARGE_HEIGHT 240 + +static Window +find_toplevel_window (Window xid) { - SMALL, - MEDIUM, - LARGE -} WidgetSize; + Window root, parent, *children; + int nchildren; + + do + { + if (XQueryTree (GDK_DISPLAY (), xid, &root, + &parent, &children, &nchildren) == 0) + { + g_warning ("Couldn't find window manager window"); + return None; + } + + if (root == parent) + return xid; + + xid = parent; + } + while (TRUE); +} + + +static gboolean +adjust_size_callback (WidgetInfo *info) +{ + Window toplevel; + Window root; + gint tx; + gint ty; + guint twidth; + guint theight; + guint tborder_width; + guint tdepth; + gint target_width = 0; + gint target_height = 0; + + toplevel = find_toplevel_window (GDK_WINDOW_XID (info->window->window)); + XGetGeometry (GDK_WINDOW_XDISPLAY (info->window->window), + toplevel, + &root, &tx, &ty, &twidth, &theight, &tborder_width, &tdepth); + + switch (info->size) + { + case SMALL: + target_width = SMALL_WIDTH; + target_height = SMALL_HEIGHT; + break; + case MEDIUM: + target_width = MEDIUM_WIDTH; + target_height = MEDIUM_HEIGHT; + break; + case LARGE: + target_width = LARGE_WIDTH; + target_height = LARGE_HEIGHT; + break; + } + + if (twidth > target_width || + theight > target_height) + { + gtk_widget_set_size_request (info->window, + 2 + target_width - (twidth - target_width), /* Dunno why I need the +2 fudge factor; */ + 2 + target_height - (theight - target_height)); + } + return FALSE; +} + +static void +realize_callback (GtkWidget *widget, + WidgetInfo *info) +{ + g_timeout_add (500, (GSourceFunc)adjust_size_callback, info); +} static WidgetInfo * new_widget_info (const char *name, @@ -17,10 +96,13 @@ new_widget_info (const char *name, info = g_new0 (WidgetInfo, 1); info->name = g_strdup (name); + info->size = size; if (GTK_IS_WINDOW (widget)) { info->window = widget; + gtk_window_set_resizable (GTK_WINDOW (info->window), FALSE); info->include_decorations = TRUE; + g_signal_connect (info->window, "realize", G_CALLBACK (realize_callback), info); } else { @@ -454,8 +536,7 @@ create_window (void) WidgetInfo *info; GtkWidget *widget; - widget = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_NONE); + widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); info = new_widget_info ("window", widget, MEDIUM); info->include_decorations = TRUE; gtk_window_set_title (GTK_WINDOW (info->window), "Window"); @@ -525,7 +606,7 @@ create_message_dialog (void) GTK_BUTTONS_OK, NULL); gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (widget), - "<b>Message Dialog</b>"); + "<b>Message Dialog</b>\n\nWith secondary text"); return new_widget_info ("messagedialog", widget, MEDIUM); } @@ -602,23 +683,28 @@ create_spinbutton (void) static WidgetInfo * create_statusbar (void) { + WidgetInfo *info; GtkWidget *widget; GtkWidget *vbox, *align; + vbox = gtk_vbox_new (FALSE, 0); + align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (align), gtk_label_new ("Status Bar")); + gtk_box_pack_start (GTK_BOX (vbox), + align, + TRUE, TRUE, 0); widget = gtk_statusbar_new (); + align = gtk_alignment_new (0.5, 1.0, 1.0, 0.0); + gtk_container_add (GTK_CONTAINER (align), widget); gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (widget), TRUE); gtk_statusbar_push (GTK_STATUSBAR (widget), 0, "Hold on..."); - gtk_widget_set_size_request (widget, 220, -1); - vbox = gtk_vbox_new (FALSE, 3); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - gtk_container_add (GTK_CONTAINER (align), widget); - gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), - gtk_label_new ("Status Bar"), - FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX (vbox), align, FALSE, FALSE, 0); + + info = new_widget_info ("statusbar", vbox, SMALL); + gtk_container_set_border_width (GTK_CONTAINER (info->window), 0); - return new_widget_info ("statusbar", vbox, SMALL); + return info; } static WidgetInfo * @@ -669,34 +755,34 @@ get_all_widgets (void) { GList *retval = NULL; + retval = g_list_prepend (retval, create_accel_label ()); retval = g_list_prepend (retval, create_button ()); - retval = g_list_prepend (retval, create_toggle_button ()); retval = g_list_prepend (retval, create_check_button ()); - retval = g_list_prepend (retval, create_entry ()); - retval = g_list_prepend (retval, create_radio ()); - retval = g_list_prepend (retval, create_label ()); - retval = g_list_prepend (retval, create_combo_box_entry ()); - retval = g_list_prepend (retval, create_text_view ()); - retval = g_list_prepend (retval, create_tree_view ()); retval = g_list_prepend (retval, create_color_button ()); + retval = g_list_prepend (retval, create_combo_box_entry ()); + retval = g_list_prepend (retval, create_entry ()); + retval = g_list_prepend (retval, create_file_button ()); retval = g_list_prepend (retval, create_font_button ()); - retval = g_list_prepend (retval, create_separator ()); - retval = g_list_prepend (retval, create_panes ()); retval = g_list_prepend (retval, create_frame ()); - retval = g_list_prepend (retval, create_window ()); - retval = g_list_prepend (retval, create_accel_label ()); - retval = g_list_prepend (retval, create_file_button ()); retval = g_list_prepend (retval, create_icon_view ()); - retval = g_list_prepend (retval, create_toolbar ()); + retval = g_list_prepend (retval, create_image ()); + retval = g_list_prepend (retval, create_label ()); retval = g_list_prepend (retval, create_menubar ()); - retval = g_list_prepend (retval, create_notebook ()); retval = g_list_prepend (retval, create_message_dialog ()); + retval = g_list_prepend (retval, create_notebook ()); + retval = g_list_prepend (retval, create_panes ()); retval = g_list_prepend (retval, create_progressbar ()); + retval = g_list_prepend (retval, create_radio ()); + retval = g_list_prepend (retval, create_scales ()); retval = g_list_prepend (retval, create_scrolledwindow ()); + retval = g_list_prepend (retval, create_separator ()); retval = g_list_prepend (retval, create_spinbutton ()); retval = g_list_prepend (retval, create_statusbar ()); - retval = g_list_prepend (retval, create_scales ()); - retval = g_list_prepend (retval, create_image ()); + retval = g_list_prepend (retval, create_text_view ()); + retval = g_list_prepend (retval, create_toggle_button ()); + retval = g_list_prepend (retval, create_toolbar ()); + retval = g_list_prepend (retval, create_tree_view ()); + retval = g_list_prepend (retval, create_window ()); return retval; } diff --git a/docs/tools/widgets.h b/docs/tools/widgets.h index 4540f313e..f4541b462 100644 --- a/docs/tools/widgets.h +++ b/docs/tools/widgets.h @@ -3,12 +3,21 @@ #include <gtk/gtk.h> + +typedef enum +{ + SMALL, + MEDIUM, + LARGE +} WidgetSize; + typedef struct WidgetInfo { GtkWidget *window; gchar *name; gboolean no_focus; gboolean include_decorations; + WidgetSize size; } WidgetInfo; GList *get_all_widgets (void); |