]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcssprovider.c
a11y: Emit text-changed signals directly
[~andy/gtk] / gtk / gtkcssprovider.c
index b289b14997d7c0342483db0eabb85cac23c060a2..751266847464ff2e9d495af992c5b203d60c7e8a 100644 (file)
@@ -1273,12 +1273,6 @@ gtk_css_ruleset_add (GtkCssRuleset       *ruleset,
     ruleset->styles[i].section = NULL;
 }
 
-static GtkCssChange
-gtk_css_ruleset_get_change (GtkCssRuleset *ruleset)
-{
-  return _gtk_css_selector_tree_match_get_change (ruleset->selector_match);
-}
-
 static void
 gtk_css_scanner_destroy (GtkCssScanner *scanner)
 {
@@ -1441,6 +1435,49 @@ verify_tree_match_results (GtkCssProvider *provider,
 #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,
@@ -1585,29 +1622,14 @@ gtk_css_style_provider_get_change (GtkStyleProviderPrivate *provider,
 {
   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);
-
-  for (i = tree_rules->len - 1; i >= 0; i--)
-    {
-      GtkCssRuleset *ruleset;
-
-      ruleset = tree_rules->pdata[i];
+  change = _gtk_css_selector_tree_get_change_all (priv->tree, matcher);
 
-      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;
 }
@@ -2430,6 +2452,18 @@ gtk_css_provider_postprocess (GtkCssProvider *css_provider)
 
   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