container: Don't use forall() in compute_expand
authorTimm Bäder <mail@baedert.org>
Sat, 17 Mar 2018 13:59:19 +0000 (14:59 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 20 Mar 2018 08:37:58 +0000 (09:37 +0100)
Use the widget list instead, which saves some code.

gtk/gtkcontainer.c

index 7ceb758868594c693e34fed09804058f36b4ca90..18b6ccfe9ded28f3235660b006adb8bce8274b54 100644 (file)
@@ -1849,51 +1849,36 @@ gtk_container_get_children (GtkContainer *container)
   return g_list_reverse (children);
 }
 
-typedef struct {
-  gboolean hexpand;
-  gboolean vexpand;
-} ComputeExpandData;
-
-static void
-gtk_container_compute_expand_callback (GtkWidget *widget,
-                                       gpointer   client_data)
-{
-  ComputeExpandData *data = client_data;
-
-  /* note that we don't get_expand on the child if we already know we
-   * have to expand, so we only recurse into children until we find
-   * one that expands and then we basically don't do any more
-   * work. This means that we can leave some children in a
-   * need_compute_expand state, which is fine, as long as GtkWidget
-   * doesn't rely on an invariant that "if a child has
-   * need_compute_expand, its parents also do"
-   *
-   * gtk_widget_compute_expand() always returns FALSE if the
-   * child is !visible so that's taken care of.
-   */
-  data->hexpand = data->hexpand ||
-    gtk_widget_compute_expand (widget, GTK_ORIENTATION_HORIZONTAL);
-
-  data->vexpand = data->vexpand ||
-    gtk_widget_compute_expand (widget, GTK_ORIENTATION_VERTICAL);
-}
-
 static void
-gtk_container_compute_expand (GtkWidget         *widget,
-                              gboolean          *hexpand_p,
-                              gboolean          *vexpand_p)
+gtk_container_compute_expand (GtkWidget *widget,
+                              gboolean  *hexpand_p,
+                              gboolean  *vexpand_p)
 {
-  ComputeExpandData data;
-
-  data.hexpand = FALSE;
-  data.vexpand = FALSE;
+  GtkWidget *w;
+  gboolean hexpand = FALSE;
+  gboolean vexpand = FALSE;
 
-  gtk_container_forall (GTK_CONTAINER (widget),
-                        gtk_container_compute_expand_callback,
-                        &data);
+  for (w = gtk_widget_get_first_child (widget);
+       w != NULL;
+       w = gtk_widget_get_next_sibling (w))
+    {
+      /* note that we don't get_expand on the child if we already know we
+       * have to expand, so we only recurse into children until we find
+       * one that expands and then we basically don't do any more
+       * work. This means that we can leave some children in a
+       * need_compute_expand state, which is fine, as long as GtkWidget
+       * doesn't rely on an invariant that "if a child has
+       * need_compute_expand, its parents also do"
+       *
+       * gtk_widget_compute_expand() always returns FALSE if the
+       * child is !visible so that's taken care of.
+       */
+      hexpand = hexpand || gtk_widget_compute_expand (w, GTK_ORIENTATION_HORIZONTAL);
+      vexpand = vexpand || gtk_widget_compute_expand (w, GTK_ORIENTATION_VERTICAL);
+    }
 
-  *hexpand_p = data.hexpand;
-  *vexpand_p = data.vexpand;
+  *hexpand_p = hexpand;
+  *vexpand_p = vexpand;
 }
 
 static void