ruleset->styles[i].section = NULL;
}
-static gboolean
-gtk_css_ruleset_matches (GtkCssRuleset *ruleset,
- const GtkCssMatcher *matcher)
-{
- return _gtk_css_selector_matches (ruleset->selector, matcher);
-}
-
-static GtkCssChange
-gtk_css_ruleset_get_change (GtkCssRuleset *ruleset)
-{
- return _gtk_css_selector_get_change (ruleset->selector);
-}
-
static void
gtk_css_scanner_destroy (GtkCssScanner *scanner)
{
#ifdef VERIFY_TREE
GtkCssProviderPrivate *priv = provider->priv;
GtkCssRuleset *ruleset;
+ gboolean should_match;
int i, j;
for (i = 0; i < priv->rulesets->len; i++)
break;
}
}
-
- if (found != !!gtk_css_ruleset_matches (ruleset, matcher))
+ should_match = _gtk_css_selector_matches (ruleset->selector, matcher);
+ if (found != !!should_match)
{
g_error ("expected rule '%s' to %s, but it %s\n",
_gtk_css_selector_to_string (ruleset->selector),
- gtk_css_ruleset_matches (ruleset, matcher) ? "match" : "not match",
+ should_match ? "match" : "not match",
found ? "matched" : "didn't match");
}
}
#endif
}
+static void
+verify_tree_get_change_results (GtkCssProvider *provider,
+ const GtkCssMatcher *matcher,
+ GtkCssChange change)
+{
+#ifdef VERIFY_TREE
+ {
+ GtkCssChange verify_change = 0;
+ GPtrArray *tree_rules;
+ int i;
+
+ tree_rules = _gtk_css_selector_tree_match_all (provider->priv->tree, matcher);
+ verify_tree_match_results (provider, matcher, tree_rules);
+
+ for (i = tree_rules->len - 1; i >= 0; i--)
+ {
+ GtkCssRuleset *ruleset;
+
+ ruleset = tree_rules->pdata[i];
+
+ verify_change |= _gtk_css_selector_tree_match_get_change (ruleset->selector_match);
+ }
+
+ if (change != verify_change)
+ {
+ GString *s;
+
+ s = g_string_new ("");
+ g_string_append_printf (s, "expected change 0x%x, but it was 0x%x", verify_change, change);
+ if ((change & ~verify_change) != 0)
+ g_string_append_printf (s, ", unexpectedly set: 0x%x", change & ~verify_change);
+ if ((~change & verify_change) != 0)
+ g_string_append_printf (s, ", unexpectedly no set: 0x%x", ~change & verify_change);
+ g_warning (s->str);
+ g_string_free (s, TRUE);
+ }
+
+ g_ptr_array_free (tree_rules, TRUE);
+ }
+#endif
+}
+
+
static gboolean
gtk_css_provider_get_style_property (GtkStyleProvider *provider,
GtkWidgetPath *path,
GtkCssProvider *css_provider = GTK_CSS_PROVIDER (provider);
GtkCssProviderPrivate *priv = css_provider->priv;
WidgetPropertyValue *val;
+ GPtrArray *tree_rules;
GtkCssMatcher matcher;
gboolean found = FALSE;
gchar *prop_name;
if (!_gtk_css_matcher_init (&matcher, path, state))
return FALSE;
+ tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher);
+ verify_tree_match_results (css_provider, &matcher, tree_rules);
+
prop_name = g_strdup_printf ("-%s-%s",
g_type_name (pspec->owner_type),
pspec->name);
- for (i = priv->rulesets->len - 1; i >= 0; i--)
+ for (i = tree_rules->len - 1; i >= 0; i--)
{
- GtkCssRuleset *ruleset;
-
- ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
+ GtkCssRuleset *ruleset = tree_rules->pdata[i];
if (ruleset->widget_style == NULL)
continue;
- if (!gtk_css_ruleset_matches (ruleset, &matcher))
- continue;
-
for (val = ruleset->widget_style; val != NULL; val = val->next)
{
if (strcmp (val->name, prop_name) == 0)
}
g_free (prop_name);
+ g_ptr_array_free (tree_rules, TRUE);
return found;
}
{
GtkCssProvider *css_provider;
GtkCssProviderPrivate *priv;
- GtkCssChange change = 0;
- GPtrArray *tree_rules;
- int i;
+ GtkCssChange change;
css_provider = GTK_CSS_PROVIDER (provider);
priv = css_provider->priv;
- tree_rules = _gtk_css_selector_tree_match_all (priv->tree, matcher);
- verify_tree_match_results (css_provider, matcher, tree_rules);
+ change = _gtk_css_selector_tree_get_change_all (priv->tree, matcher);
- for (i = tree_rules->len - 1; i >= 0; i--)
- {
- GtkCssRuleset *ruleset;
-
- ruleset = tree_rules->pdata[i];
-
- if (ruleset->styles == NULL)
- continue;
-
- change |= gtk_css_ruleset_get_change (ruleset);
- }
-
- g_ptr_array_free (tree_rules, TRUE);
+ verify_tree_get_change_results (css_provider, matcher, change);
return change;
}
priv->tree = _gtk_css_selector_tree_builder_build (builder);
_gtk_css_selector_tree_builder_free (builder);
+
+#ifndef VERIFY_TREE
+ for (i = 0; i < priv->rulesets->len; i++)
+ {
+ GtkCssRuleset *ruleset;
+
+ ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
+
+ _gtk_css_selector_free (ruleset->selector);
+ ruleset->selector = NULL;
+ }
+#endif
}
static gboolean
WidgetPropertyValue *widget_value;
guint i;
- _gtk_css_selector_print (ruleset->selector, str);
+ _gtk_css_selector_tree_match_print (ruleset->selector_match, str);
g_string_append (str, " {\n");