diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-04-03 23:17:16 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-04-03 23:17:16 +0000 |
commit | 32cd050cfe286e636d4df6d96a4b46936279a5a6 (patch) | |
tree | 4f45bb5081e616ff501d984ea7c3481e0d43ab74 /gtk/gtkwindow.c | |
parent | 740b70ea0c1bcdb5943b85ed0bba434f73f9a292 (diff) | |
download | gtk+-32cd050cfe286e636d4df6d96a4b46936279a5a6.tar.gz |
More extensive debugging output
Fri Apr 3 17:14:55 1998 Owen Taylor <owt1@cornell.edu>
* gdk/gdk.c: More extensive debugging output
* gtk/gtkalignment.c gtk/gtkbutton.c gtk/gtkcheckbutton.c
gtk/gtkclist.c gtk/gtkeventbox.c gtk/gtkhandlebox.c
gtk/gtk[hv]box.c gtk/gtk[hv]paned.c gtk/gtklist.c
gtk/gtkmenu.c gtk/gtkmenubar.c gtk/gtkmenuitem.c
gtk/gtknotebook.c gtk/gtktable.c gtk/gtktree.c
gtk/gtktreeitem.c gtk/gtkviewport.c
Avoid assigning negative values to unsigned allocation.width and
height
* gtk/gtkwindow.c:
Instead of realizing the widget, then size allocating, (resulting
in XMoveResizeWindows for all children, do the size allocation
first, then realize.
In gtk_real_window_move_resize, combine move and resize
into a single GDK/X call when possible.
* gtk/gtkclist.c gtk/gtkdrawingarea.c:
Remove assumption that the widget will be size allocated _after_
it is realized.
* gtk/gtklist.c (gtk_list_motion_notify): Removed useless
debugging message.
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r-- | gtk/gtkwindow.c | 140 |
1 files changed, 77 insertions, 63 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index b839c580ce..ae444d8e17 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -561,7 +561,6 @@ gtk_window_map (GtkWidget *widget) GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); - gtk_window_move_resize (widget); window = GTK_WINDOW (widget); if (window->bin.child && @@ -569,7 +568,6 @@ gtk_window_map (GtkWidget *widget) !GTK_WIDGET_MAPPED (window->bin.child)) gtk_widget_map (window->bin.child); - gtk_window_set_hints (widget, &widget->requisition); gdk_window_show (widget->window); } @@ -639,6 +637,8 @@ gtk_window_realize (GtkWidget *widget) widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); + + gtk_window_set_hints (widget, &widget->requisition); } static void @@ -744,7 +744,7 @@ gtk_window_configure_event (GtkWidget *widget, gtk_widget_map (window->bin.child); if (window->resize_count > 0) - window->resize_count -= 1; + window->resize_count -= 1; window->handling_resize = FALSE; @@ -1044,10 +1044,7 @@ gtk_real_window_move_resize (GtkWindow *window, g_return_val_if_fail ((x != NULL) || (y != NULL), FALSE); widget = GTK_WIDGET (window); - - if ((*x != -1) && (*y != -1)) - gdk_window_move (widget->window, *x, *y); - + if ((widget->requisition.width == 0) || (widget->requisition.height == 0)) { @@ -1055,6 +1052,20 @@ gtk_real_window_move_resize (GtkWindow *window, widget->requisition.height = 200; } + if (!GTK_WIDGET_REALIZED (window)) + { + GtkAllocation allocation; + + allocation.x = 0; + allocation.y = 0; + allocation.width = widget->requisition.width; + allocation.height = widget->requisition.height; + + gtk_widget_size_allocate (widget, &allocation); + + return FALSE; + } + gdk_window_get_geometry (widget->window, NULL, NULL, &width, &height, NULL); if ((window->auto_shrink && @@ -1064,9 +1075,14 @@ gtk_real_window_move_resize (GtkWindow *window, (height < widget->requisition.height)) { window->resize_count += 1; - gdk_window_resize (widget->window, - widget->requisition.width, - widget->requisition.height); + if ((*x != -1) && (*y != -1)) + gdk_window_move_resize (widget->window, *x, *y, + widget->requisition.width, + widget->requisition.height); + else + gdk_window_resize (widget->window, + widget->requisition.width, + widget->requisition.height); } else { @@ -1085,6 +1101,9 @@ gtk_real_window_move_resize (GtkWindow *window, GSList *resize_containers; GSList *node; + if ((*x != -1) && (*y != -1)) + gdk_window_move (widget->window, *x, *y); + resize_widgets = GTK_CONTAINER (window)->resize_widgets; GTK_CONTAINER (window)->resize_widgets = NULL; @@ -1167,61 +1186,56 @@ gtk_window_move_resize (GtkWidget *widget) g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_WINDOW (widget), FALSE); + window = GTK_WINDOW (widget); return_val = FALSE; - if (GTK_WIDGET_REALIZED (widget)) - { - window = GTK_WINDOW (widget); - - /* Remember old size, to know if we have to reset hints */ - width = widget->requisition.width; - height = widget->requisition.height; - gtk_widget_size_request (widget, &widget->requisition); - - if (GTK_WIDGET_MAPPED (widget) && - (width != widget->requisition.width || - height != widget->requisition.height)) - gtk_window_set_hints (widget, &widget->requisition); - - x = -1; - y = -1; - width = widget->requisition.width; - height = widget->requisition.height; - - if (window->use_uposition) - switch (window->position) - { - case GTK_WIN_POS_CENTER: - x = (gdk_screen_width () - width) / 2; - y = (gdk_screen_height () - height) / 2; - gtk_widget_set_uposition (widget, x, y); - break; - case GTK_WIN_POS_MOUSE: - gdk_window_get_pointer (NULL, &x, &y, NULL); - - x -= width / 2; - y -= height / 2; - - screen_width = gdk_screen_width (); - screen_height = gdk_screen_height (); - - if (x < 0) - x = 0; - else if (x > (screen_width - width)) - x = screen_width - width; - - if (y < 0) - y = 0; - else if (y > (screen_height - height)) - y = screen_height - height; - - gtk_widget_set_uposition (widget, x, y); - break; - } - - gtk_signal_emit (GTK_OBJECT (widget), window_signals[MOVE_RESIZE], - &x, &y, width, height, &return_val); - } + /* Remember old size, to know if we have to reset hints */ + width = widget->requisition.width; + height = widget->requisition.height; + gtk_widget_size_request (widget, &widget->requisition); + + if ((width != widget->requisition.width || + height != widget->requisition.height)) + gtk_window_set_hints (widget, &widget->requisition); + + x = -1; + y = -1; + width = widget->requisition.width; + height = widget->requisition.height; + + if (window->use_uposition) + switch (window->position) + { + case GTK_WIN_POS_CENTER: + x = (gdk_screen_width () - width) / 2; + y = (gdk_screen_height () - height) / 2; + gtk_widget_set_uposition (widget, x, y); + break; + case GTK_WIN_POS_MOUSE: + gdk_window_get_pointer (NULL, &x, &y, NULL); + + x -= width / 2; + y -= height / 2; + + screen_width = gdk_screen_width (); + screen_height = gdk_screen_height (); + + if (x < 0) + x = 0; + else if (x > (screen_width - width)) + x = screen_width - width; + + if (y < 0) + y = 0; + else if (y > (screen_height - height)) + y = screen_height - height; + + gtk_widget_set_uposition (widget, x, y); + break; + } + + gtk_signal_emit (GTK_OBJECT (widget), window_signals[MOVE_RESIZE], + &x, &y, width, height, &return_val); return return_val; } |