cssnode: Track pending changes here
authorBenjamin Otte <otte@redhat.com>
Tue, 3 Feb 2015 14:36:01 +0000 (15:36 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 Mar 2015 14:23:30 +0000 (15:23 +0100)
... instead of GtkCssWidgetNode.

gtk/gtkcssnode.c
gtk/gtkcssnodeprivate.h
gtk/gtkcsswidgetnode.c
gtk/gtkcsswidgetnodeprivate.h

index 86056aa2cdfd29403c874ba202bb469f17e3f383..b4ea530694a81506ce8b7cedd96f57767c470baa 100644 (file)
@@ -531,6 +531,8 @@ void
 gtk_css_node_invalidate (GtkCssNode   *cssnode,
                          GtkCssChange  change)
 {
+  cssnode->pending_changes |= change;
+
   GTK_CSS_NODE_GET_CLASS (cssnode)->invalidate (cssnode, change);
 
   gtk_css_node_set_invalid (cssnode, TRUE);
@@ -565,6 +567,9 @@ gtk_css_node_validate (GtkCssNode            *cssnode,
 
   gtk_css_node_set_invalid (cssnode, FALSE);
 
+  change |= cssnode->pending_changes;
+  cssnode->pending_changes = 0;
+
   changes = GTK_CSS_NODE_GET_CLASS (cssnode)->validate (cssnode, timestamp, change, parent_changes);
 
   change = _gtk_css_change_for_child (change);
index 15afd6c21f1256f976e93e42cea2da0bf05dc15c..7d6cbed226e06de5a99248f635d69fc271fe3314 100644 (file)
@@ -47,7 +47,9 @@ struct _GtkCssNode
   GtkCssNodeDeclaration *decl;
   GtkCssStyle           *style;
 
-  guint                  invalid :1;    /* set if node or a child is invalid */
+  GtkCssChange           pending_changes;       /* changes that accumulated since the style was last computed */
+
+  guint                  invalid :1;            /* set if node or a child is invalid */
 };
 
 struct _GtkCssNodeClass
index 8c9a27107659a2240bdb7d5cec66d5cb1ae89200..0f7e8708a9d17dbc2bccd5b2df3dc2ef6992adb5 100644 (file)
 
 G_DEFINE_TYPE (GtkCssWidgetNode, gtk_css_widget_node, GTK_TYPE_CSS_NODE)
 
-static void
-gtk_css_widget_node_invalidate (GtkCssNode   *node,
-                                GtkCssChange  change)
-{
-  GtkCssWidgetNode *widget_node = GTK_CSS_WIDGET_NODE (node);
-
-  widget_node->pending_changes |= change;
-}
-
 static void
 gtk_css_widget_node_set_invalid (GtkCssNode *node,
                                  gboolean    invalid)
@@ -86,9 +77,6 @@ gtk_css_widget_node_validate (GtkCssNode       *node,
   GtkBitmask *changes;
   GtkCssStyle *style;
 
-  change |= widget_node->pending_changes;
-  widget_node->pending_changes = 0;
-
   if (widget_node->widget == NULL)
     return _gtk_bitmask_new ();
 
@@ -218,7 +206,6 @@ gtk_css_widget_node_class_init (GtkCssWidgetNodeClass *klass)
 {
   GtkCssNodeClass *node_class = GTK_CSS_NODE_CLASS (klass);
 
-  node_class->invalidate = gtk_css_widget_node_invalidate;
   node_class->validate = gtk_css_widget_node_validate;
   node_class->set_invalid = gtk_css_widget_node_set_invalid;
   node_class->create_widget_path = gtk_css_widget_node_create_widget_path;
index d34becc4b32c43751a1ee1250a23a74bd2fd0c49..a3a59c8406174dec087bfe54fdd24de1e4032541 100644 (file)
@@ -38,8 +38,6 @@ struct _GtkCssWidgetNode
   GtkCssNode node;
 
   GtkWidget *widget;
-
-  GtkCssChange pending_changes;
 };
 
 struct _GtkCssWidgetNodeClass