cssnode: Handle invalidate queueing differently
authorBenjamin Otte <otte@redhat.com>
Sat, 7 Feb 2015 17:53:07 +0000 (18:53 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 Mar 2015 14:23:30 +0000 (15:23 +0100)
Instead of directly requesting the layout phase, register a tick
callback. This is what the docs suggest for animations and it's what we
need for the next commit.

gtk/gtkcsswidgetnode.c
gtk/gtkcsswidgetnodeprivate.h

index cb46bb2a46d85d0098e64abe1097a948809d5fbe..a684431e9ea8fcc157ccad914f8e5cd75f4a169e 100644 (file)
@@ -46,9 +46,22 @@ gtk_css_widget_node_queue_validate (GtkCssNode *node)
 
   G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (GTK_IS_RESIZE_CONTAINER (widget_node->widget))
-    {
-      _gtk_container_queue_restyle (GTK_CONTAINER (widget_node->widget));
-    }
+    widget_node->validate_cb_id = gtk_widget_add_tick_callback (widget_node->widget,
+                                                                (GtkTickCallback) _gtk_container_queue_restyle,
+                                                                NULL,
+                                                                NULL);
+  G_GNUC_END_IGNORE_DEPRECATIONS
+}
+
+static void
+gtk_css_widget_node_dequeue_validate (GtkCssNode *node)
+{
+  GtkCssWidgetNode *widget_node = GTK_CSS_WIDGET_NODE (node);
+
+  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  if (GTK_IS_RESIZE_CONTAINER (widget_node->widget))
+    gtk_widget_remove_tick_callback (widget_node->widget,
+                                     widget_node->validate_cb_id);
   G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
@@ -204,6 +217,7 @@ gtk_css_widget_node_class_init (GtkCssWidgetNodeClass *klass)
   node_class->update_style = gtk_css_widget_node_update_style;
   node_class->validate = gtk_css_widget_node_validate;
   node_class->queue_validate = gtk_css_widget_node_queue_validate;
+  node_class->dequeue_validate = gtk_css_widget_node_dequeue_validate;
   node_class->create_widget_path = gtk_css_widget_node_create_widget_path;
   node_class->get_widget_path = gtk_css_widget_node_get_widget_path;
   node_class->get_style_provider = gtk_css_widget_node_get_style_provider;
index a3a59c8406174dec087bfe54fdd24de1e4032541..28e602006eadc63eb028daffda68b3dc8b4747bb 100644 (file)
@@ -38,6 +38,7 @@ struct _GtkCssWidgetNode
   GtkCssNode node;
 
   GtkWidget *widget;
+  guint validate_cb_id;
 };
 
 struct _GtkCssWidgetNodeClass