From a31123e9f0a12b3eeeaf65f8ea87d1a177aa454a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 28 Sep 2015 05:48:57 +0200 Subject: [PATCH] sizegroup: Skip resizes on widgets that have resize queued Widgets that already have a resize queued don't need to walk the whole parent chain and queue another resize. It's enough to do it once per resize. This also means that sizegroups cannot use the shortcut of just invalidating the first widget in the group anymore. That widget might already have a resize queued while others don't. --- gtk/gtksizegroup.c | 10 ++++++++-- gtk/gtkwindow.c | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gtk/gtksizegroup.c b/gtk/gtksizegroup.c index 3eddc1fddb..a6e0d1f600 100644 --- a/gtk/gtksizegroup.c +++ b/gtk/gtksizegroup.c @@ -217,6 +217,9 @@ queue_resize_on_widget (GtkWidget *widget, do { + if (gtk_widget_get_resize_needed (parent)) + return; + gtk_widget_queue_resize_on_widget (parent); if (!check_siblings || _gtk_widget_get_sizegroups (parent) == NULL) @@ -268,9 +271,12 @@ static void queue_resize_on_group (GtkSizeGroup *size_group) { GtkSizeGroupPrivate *priv = size_group->priv; + GSList *list; - if (priv->widgets) - queue_resize_on_widget (priv->widgets->data, TRUE); + for (list = priv->widgets; list; list = list->next) + { + gtk_widget_queue_resize (list->data); + } } static void diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index e65045b9ac..fb8c2a202c 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -7686,6 +7686,7 @@ gtk_window_configure_event (GtkWidget *widget, priv->configure_notify_received = TRUE; gtk_widget_queue_resize (widget); + gtk_container_queue_resize_handler (GTK_CONTAINER (widget)); return TRUE; }