summaryrefslogtreecommitdiff
path: root/gtk/gtkwidget.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r--gtk/gtkwidget.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 2eef5cbfc8..406cb6fb78 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -16252,16 +16252,30 @@ G_GNUC_END_IGNORE_DEPRECATIONS;
while (TRUE);
}
+gboolean
+gtk_widget_needs_allocate (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = widget->priv;
+
+ if (!priv->visible || !priv->child_visible)
+ return FALSE;
+
+ if (priv->resize_needed || priv->alloc_needed || priv->alloc_needed_on_child)
+ return TRUE;
+
+ return FALSE;
+}
+
void
gtk_widget_ensure_allocate (GtkWidget *widget)
{
GtkWidgetPrivate *priv = widget->priv;
- gtk_widget_ensure_resize (widget);
-
- if (!priv->visible || !priv->child_visible)
+ if (!gtk_widget_needs_allocate (widget))
return;
+ gtk_widget_ensure_resize (widget);
+
/* This code assumes that we only reach here if the previous
* allocation is still valid (ie no resize was queued).
* If that wasn't true, the parent would have taken care of