From 37256cb76bc0dbe2b493b4895e992c8b61a722ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Sun, 28 Jun 2020 14:13:23 +0200 Subject: [PATCH] clutter/box-layout: Request the correct size for homogeneous layouts In case the layout is homogeneous, all children aligned by the box layout must be allocated the same size. In order to fit them all inside the container, the size request of the box layout has to look for the child with the largest size and use that size for all children. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2737 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1333 --- clutter/clutter/clutter-box-layout.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/clutter/clutter/clutter-box-layout.c b/clutter/clutter/clutter-box-layout.c index 17b4c77d9..93c8392fb 100644 --- a/clutter/clutter/clutter-box-layout.c +++ b/clutter/clutter/clutter-box-layout.c @@ -167,8 +167,10 @@ get_preferred_size_for_orientation (ClutterBoxLayout *self, ClutterActor *child; gint n_children = 0; gfloat minimum, natural; + float largest_min_size, largest_nat_size; minimum = natural = 0; + largest_min_size = largest_nat_size = 0; clutter_actor_iter_init (&iter, container); while (clutter_actor_iter_next (&iter, &child)) @@ -183,8 +185,22 @@ get_preferred_size_for_orientation (ClutterBoxLayout *self, get_child_size (child, priv->orientation, for_size, &child_min, &child_nat); - minimum += child_min; - natural += child_nat; + if (priv->is_homogeneous) + { + largest_min_size = MAX (largest_min_size, child_min); + largest_nat_size = MAX (largest_nat_size, child_nat); + } + else + { + minimum += child_min; + natural += child_nat; + } + } + + if (priv->is_homogeneous) + { + minimum = largest_min_size * n_children; + natural = largest_nat_size * n_children; } if (n_children > 1)