diff options
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r-- | gtk/gtkwidget.c | 20 |
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 |