summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
authorOwen Taylor <owt1@cornell.edu>1998-04-03 23:17:16 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-04-03 23:17:16 +0000
commit32cd050cfe286e636d4df6d96a4b46936279a5a6 (patch)
tree4f45bb5081e616ff501d984ea7c3481e0d43ab74 /gtk/gtkwindow.c
parent740b70ea0c1bcdb5943b85ed0bba434f73f9a292 (diff)
downloadgtk+-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.c140
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;
}