gtk_css_node_set_invalid (cssnode, TRUE);
}
+static void
+gtk_css_node_propagate_pending_changes (GtkCssNode *cssnode)
+{
+ GtkCssChange change;
+ GtkCssNode *child;
+
+ if (!cssnode->invalid)
+ return;
+
+ change = _gtk_css_change_for_child (cssnode->pending_changes);
+
+ for (child = gtk_css_node_get_first_child (cssnode);
+ child;
+ child = gtk_css_node_get_next_sibling (child))
+ {
+ gtk_css_node_invalidate (child, change);
+ }
+}
+
void
gtk_css_node_validate (GtkCssNode *cssnode,
gint64 timestamp,
- GtkCssChange change,
const GtkBitmask *parent_changes)
{
+ GtkCssChange change;
GtkCssNode *child;
GtkBitmask *changes;
if (!cssnode->invalid && change == 0 && _gtk_bitmask_is_empty (parent_changes))
return;
+ gtk_css_node_propagate_pending_changes (cssnode);
+
gtk_css_node_set_invalid (cssnode, FALSE);
- change |= cssnode->pending_changes;
+ 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);
-
for (child = gtk_css_node_get_first_child (cssnode);
child;
child = gtk_css_node_get_next_sibling (child))
{
- gtk_css_node_validate (child, timestamp, change, changes);
+ gtk_css_node_validate (child, timestamp, changes);
}
_gtk_bitmask_free (changes);