diff options
-rw-r--r-- | gtk/gtkwindow.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index a25ce752d6..d92916407a 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -5558,7 +5558,6 @@ gtk_window_guess_default_size (GtkWindow *window, gint *width, gint *height) { - GtkWindowGeometryInfo *info; GtkWidget *widget; GdkScreen *screen; int minimum, natural; @@ -5598,11 +5597,21 @@ gtk_window_guess_default_size (GtkWindow *window, gtk_widget_get_preferred_height_for_width (widget, *width, &minimum, &natural); *height = MAX (minimum, MIN (*height, natural)); } +} + +static void +gtk_window_get_remembered_size (GtkWindow *window, + int *width, + int *height) +{ + GtkWindowGeometryInfo *info; + + *width = 0; + *height = 0; info = gtk_window_get_geometry_info (window, FALSE); if (info) { - g_print ("last geometry info was %d %d\n", info->last.configure_request.width, info->last.configure_request.height); /* MAX() works even if the last request is unset with -1 */ *width = MAX (*width, info->last.configure_request.width); *height = MAX (*height, info->last.configure_request.height); @@ -5674,11 +5683,15 @@ gtk_window_realize (GtkWidget *widget) allocation.width == 1 && allocation.height == 1) { + gint w, h; allocation.x = 0; allocation.y = 0; gtk_window_guess_default_size (window, &allocation.width, &allocation.height); + gtk_window_get_remembered_size (window, &w, &h); + allocation.width = MAX (allocation.width, w); + allocation.height = MAX (allocation.height, h); if (allocation.width == 0 || allocation.height == 0) { /* non-empty window */ @@ -7978,6 +7991,7 @@ gtk_window_compute_configure_request_size (GtkWindow *window, gint *height) { GtkWindowGeometryInfo *info; + int w, h; /* Preconditions: * - we've done a size request @@ -7986,6 +8000,9 @@ gtk_window_compute_configure_request_size (GtkWindow *window, info = gtk_window_get_geometry_info (window, FALSE); gtk_window_guess_default_size (window, width, height); + gtk_window_get_remembered_size (window, &w, &h); + *width = MAX (*width, w); + *height = MAX (*height, h); /* If window is empty so requests 0, default to random nonzero size */ if (*width == 0 && *height == 0) |