diff options
author | Benjamin Otte <otte@redhat.com> | 2015-10-08 13:41:50 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-10-09 15:32:11 +0200 |
commit | 562bfc901df2cc9f517014ad7dc2dd0bdc5c1869 (patch) | |
tree | e1aa08f85e58d63bfda53fea408846683590bf15 | |
parent | 0b92fab92154fe4151e26cb8450a0adce7d1cddc (diff) | |
download | gtk+-562bfc901df2cc9f517014ad7dc2dd0bdc5c1869.tar.gz |
container: Don't keep our own variable trying to track need for resizewip/otte/queue-resize
Insteaad, introduce gtk_widget_needs_allocate() and use that.
-rw-r--r-- | gtk/gtkcontainer.c | 18 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 20 | ||||
-rw-r--r-- | gtk/gtkwidgetprivate.h | 1 |
3 files changed, 26 insertions, 13 deletions
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 4eff5b54d0..e6a58b2dee 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -264,7 +264,6 @@ struct _GtkContainerPrivate guint has_focus_chain : 1; guint reallocate_redraws : 1; - guint resize_pending : 1; guint restyle_pending : 1; guint resize_mode : 2; guint request_mode : 2; @@ -2008,13 +2007,12 @@ gtk_container_idle_sizer (GdkFrameClock *clock, * than trying to explicitly work around them with some extra flags, * since it doesn't cause any actual harm. */ - if (container->priv->resize_pending) + if (gtk_widget_needs_allocate (GTK_WIDGET (container))) { - container->priv->resize_pending = FALSE; gtk_container_check_resize (container); } - if (!container->priv->restyle_pending && !container->priv->resize_pending) + if (!container->priv->restyle_pending && !gtk_widget_needs_allocate (GTK_WIDGET (container))) { _gtk_container_stop_idle_sizer (container); } @@ -2074,11 +2072,8 @@ gtk_container_queue_resize_handler (GtkContainer *container) switch (container->priv->resize_mode) { case GTK_RESIZE_QUEUE: - if (!container->priv->resize_pending) - { - container->priv->resize_pending = TRUE; - gtk_container_start_idle_sizer (container); - } + if (gtk_widget_needs_allocate (widget)) + gtk_container_start_idle_sizer (container); break; case GTK_RESIZE_IMMEDIATE: @@ -2112,7 +2107,10 @@ _gtk_container_queue_restyle (GtkContainer *container) void _gtk_container_maybe_start_idle_sizer (GtkContainer *container) { - if (container->priv->restyle_pending || container->priv->resize_pending) + if (!GTK_IS_RESIZE_CONTAINER (container)) + return; + + if (container->priv->restyle_pending || gtk_widget_needs_allocate (GTK_WIDGET (container))) gtk_container_start_idle_sizer (container); } 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 diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 856fc730fb..484c1f38e1 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -167,6 +167,7 @@ gboolean _gtk_widget_get_shadowed (GtkWidget *widget); void _gtk_widget_set_shadowed (GtkWidget *widget, gboolean shadowed); gboolean _gtk_widget_get_alloc_needed (GtkWidget *widget); +gboolean gtk_widget_needs_allocate (GtkWidget *widget); void gtk_widget_queue_resize_on_widget (GtkWidget *widget); void gtk_widget_ensure_resize (GtkWidget *widget); void gtk_widget_ensure_allocate (GtkWidget *widget); |