#endif
}
-/* Compute the change flags for a given matcher.
- * We assume that name, id and classes stay unchanged, and look for all rules
- * that can be matched if anything else changes. We collect the change masks
- * from the selectors of these rules.
- */
-static GtkCssChange
-compute_change (GtkCssProvider *provider,
- const GtkCssMatcher *matcher)
-{
- GtkCssProviderPrivate *priv = gtk_css_provider_get_instance_private (provider);
- GtkCssChange change = 0;
- GPtrArray *tree_rules;
- int i;
- GtkCssMatcher change_matcher;
-
- _gtk_css_matcher_superset_init (&change_matcher, matcher);
-
- tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &change_matcher);
- if (tree_rules)
- {
- for (i = tree_rules->len - 1; i >= 0; i--)
- {
- GtkCssRuleset *ruleset;
-
- ruleset = tree_rules->pdata[i];
-
- change |= _gtk_css_selector_get_change (ruleset->selector);
- }
-
- g_ptr_array_free (tree_rules, TRUE);
- }
-
- return change;
-}
-
static GtkCssValue *
gtk_css_style_provider_get_color (GtkStyleProvider *provider,
const char *name)
}
if (change)
- *change = compute_change (css_provider, matcher);
+ *change = _gtk_css_selector_tree_get_change_all (priv->tree, matcher);
}
static void
return gtk_css_selector_foreach (selector, matcher, gtk_css_selector_foreach_match, NULL);
}
-static gboolean
-gtk_css_selector_match_for_change (const GtkCssSelector *selector,
- const GtkCssMatcher *matcher)
-{
- if (selector->class->ignore_for_change)
- return TRUE;
-
- return selector->class->match_one (selector, matcher);
-}
-
/* Computes specificity according to CSS 2.1.
* The arguments must be initialized to 0 */
static void
return array;
}
+/* The code for collecting matches assumes that the name, id and classes
+ * of a node remain unchanged, and anything else can change. This needs to
+ * be kept in sync with the definition of 'radical change' in gtkcssnode.c.
+ */
+
+static gboolean
+gtk_css_selector_match_for_change (const GtkCssSelector *selector,
+ const GtkCssMatcher *matcher)
+{
+ if (selector->class->ignore_for_change)
+ return TRUE;
+
+ return selector->class->match_one (selector, matcher);
+}
+
/* When checking for changes via the tree we need to know if a rule further
down the tree matched, because if so we need to add "our bit" to the
Change. For instance in a match like *.class:active we'll