[gtk+] container: Don't keep our own variable trying to track need for resize
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] container: Don't keep our own variable trying to track need for resize
- Date: Wed, 28 Oct 2015 18:59:23 +0000 (UTC)
commit cd20ae8fe118f08a48075f1b00f415d63a248395
Author: Benjamin Otte <otte redhat com>
Date: Thu Oct 8 13:41:50 2015 +0200
container: Don't keep our own variable trying to track need for resize
Insteaad, introduce gtk_widget_needs_allocate() and use that.
gtk/gtkcontainer.c | 18 ++++++++----------
gtk/gtkwidget.c | 20 +++++++++++++++++---
gtk/gtkwidgetprivate.h | 1 +
3 files changed, 26 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index f10c57a..87f22c6 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 12c15cb..764df90 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -16255,16 +16255,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 856fc73..484c1f3 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]