stack: Make sure to not under-measure children
authorBenjamin Otte <otte@redhat.com>
Sat, 20 Nov 2021 04:42:20 +0000 (05:42 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 20 Nov 2021 05:04:10 +0000 (06:04 +0100)
When the stack is homogeneous in only one direction, the other direction
may produce min sizes to small for all children. Make sure to query at
least the min size for those.

gtk/gtkstack.c

index a57db53631a9fec7555ed27c62b50c321179cec8..facf7ca3eb3cdd36e6d1c4e1e38ab4c127ca2cff 100644 (file)
@@ -2578,7 +2578,16 @@ gtk_stack_measure (GtkWidget      *widget,
 
       if (gtk_widget_get_visible (child))
         {
-          gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, NULL, NULL);
+          if (!priv->homogeneous[OPPOSITE_ORIENTATION(orientation)] && priv->visible_child != child_info)
+            {
+              int min_for_size;
+
+              gtk_widget_measure (child, OPPOSITE_ORIENTATION (orientation), -1, &min_for_size, NULL, NULL, NULL);
+              
+              gtk_widget_measure (child, orientation, MAX (min_for_size, for_size), &child_min, &child_nat, NULL, NULL);
+            }
+          else
+            gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, NULL, NULL);
 
           *minimum = MAX (*minimum, child_min);
           *natural = MAX (*natural, child_nat);