From: Benjamin Otte Date: Sun, 21 Nov 2021 00:15:59 +0000 (+0100) Subject: window: properly compute desired size X-Git-Tag: archive/raspbian/4.6.5+ds-1+rpi1~1^2~19^2~5^2~119^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=170bc0a8de8fc344cb21b0be2f5230e370131304;p=gtk4.git window: properly compute desired size Previously, the code did not expand the size properly when a default size was already set. Reftest included. --- diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 6ae7cef9fb..5173068453 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -4165,12 +4165,14 @@ update_realized_window_properties (GtkWindow *window) static void gtk_window_compute_default_size (GtkWindow *window, + int cur_width, + int cur_height, int max_width, int max_height, int *min_width, int *min_height, - int *nat_width, - int *nat_height) + int *width, + int *height) { GtkWidget *widget = GTK_WIDGET (window); @@ -4182,14 +4184,20 @@ gtk_window_compute_default_size (GtkWindow *window, &minimum, &natural, NULL, NULL); *min_height = minimum; - *nat_height = MAX (minimum, MIN (max_height, natural)); + if (cur_height > 0) + *height = MAX (cur_height, minimum); + else + *height = MAX (minimum, MIN (max_height, natural)); gtk_widget_measure (widget, GTK_ORIENTATION_HORIZONTAL, - *nat_height, + *height, &minimum, &natural, NULL, NULL); *min_width = minimum; - *nat_width = MAX (minimum, MIN (max_width, natural)); + if (cur_width > 0) + *width = MAX (cur_width, minimum); + else + *width = MAX (minimum, MIN (max_width, natural)); } else /* GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH or CONSTANT_SIZE */ { @@ -4199,14 +4207,20 @@ gtk_window_compute_default_size (GtkWindow *window, &minimum, &natural, NULL, NULL); *min_width = minimum; - *nat_width = MAX (minimum, MIN (max_width, natural)); + if (cur_width > 0) + *width = MAX (cur_width, minimum); + else + *width = MAX (minimum, MIN (max_width, natural)); gtk_widget_measure (widget, GTK_ORIENTATION_VERTICAL, - *nat_width, + *width, &minimum, &natural, NULL, NULL); *min_height = minimum; - *nat_height = MAX (minimum, MIN (max_height, natural)); + if (cur_height > 0) + *height = MAX (cur_height, minimum); + else + *height = MAX (minimum, MIN (max_height, natural)); } } @@ -4239,22 +4253,15 @@ toplevel_compute_size (GdkToplevel *toplevel, GtkBorder shadow; int bounds_width, bounds_height; int min_width, min_height; - int nat_width, nat_height; gdk_toplevel_size_get_bounds (size, &bounds_width, &bounds_height); gtk_window_compute_default_size (window, + priv->default_width, priv->default_height, bounds_width, bounds_height, &min_width, &min_height, - &nat_width, &nat_height); - - width = priv->default_width; - height = priv->default_height; + &width, &height); - if (width <= 0) - width = nat_width; - if (height <= 0) - height = nat_height; if (width < min_width) width = min_width; diff --git a/testsuite/reftests/default-size-too-small.ref.ui b/testsuite/reftests/default-size-too-small.ref.ui new file mode 100644 index 0000000000..1eaf937c72 --- /dev/null +++ b/testsuite/reftests/default-size-too-small.ref.ui @@ -0,0 +1,12 @@ + + + + 0 + + + Hello +World + + + + diff --git a/testsuite/reftests/default-size-too-small.ui b/testsuite/reftests/default-size-too-small.ui new file mode 100644 index 0000000000..fc504de50e --- /dev/null +++ b/testsuite/reftests/default-size-too-small.ui @@ -0,0 +1,13 @@ + + + + 4 + 0 + + + Hello World + True + + + + diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index 1df038aa22..c87eb278dd 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -266,6 +266,8 @@ testdata = [ 'data-url.css', 'data-url.ref.ui', 'data-url.ui', + 'default-size-too-small.ref.ui', + 'default-size-too-small.ui', 'default-size-undecorated.ui', 'default-size-undecorated.ref.ui', 'default-size-with-titlebar.ui',