From: Timm Bäder Date: Sat, 17 Mar 2018 13:59:19 +0000 (+0100) Subject: container: Don't use forall() in compute_expand X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~876 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=93aa5ce167b0d02a1cecb94828b2b566c178a18f;p=gtk4.git container: Don't use forall() in compute_expand Use the widget list instead, which saves some code. --- diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 7ceb758868..18b6ccfe9d 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -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