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.
This commit is contained in:
Benjamin Otte 2015-09-28 05:48:57 +02:00
parent a4587ef4a0
commit a31123e9f0
2 changed files with 9 additions and 2 deletions

View File

@ -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

View File

@ -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;
}