[gtk+] css: Track the tree selector matches



commit 6bec57777184f044274a3519e944fc304c91f0ed
Author: Alexander Larsson <alexl redhat com>
Date:   Thu Nov 29 15:29:14 2012 +0100

    css: Track the tree selector matches

 gtk/gtkcssprovider.c        |    2 ++
 gtk/gtkcssselector.c        |    5 +++++
 gtk/gtkcssselectorprivate.h |    1 +
 3 files changed, 8 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 88a1bd4..358fed2 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -986,6 +986,7 @@ struct _WidgetPropertyValue {
 struct GtkCssRuleset
 {
   GtkCssSelector *selector;
+  GtkCssSelectorTree *selector_match;
   WidgetPropertyValue *widget_style;
   PropertyValue *styles;
   GtkBitmask *set_styles;
@@ -2429,6 +2430,7 @@ gtk_css_provider_postprocess (GtkCssProvider *css_provider)
 
       _gtk_css_selector_tree_builder_add (builder,
 					  ruleset->selector,
+					  &ruleset->selector_match,
 					  ruleset);
     }
 
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index 626b28a..2ede3b4 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -1691,6 +1691,7 @@ _gtk_css_selector_tree_free (GtkCssSelectorTree *tree)
 typedef struct {
   gpointer match;
   GtkCssSelector *current_selector;
+  GtkCssSelectorTree **selector_match;
 } GtkCssSelectorRuleSetInfo;
 
 
@@ -1755,6 +1756,8 @@ subdivide_infos (GList *infos, GtkCssSelectorTree *parent)
 	      if (exact_matches == NULL)
 		exact_matches = g_ptr_array_new ();
 	      g_ptr_array_add (exact_matches, info->match);
+	      if (info->selector_match != NULL)
+		*info->selector_match = tree;
 	    }
 	  else
 	    matched = g_list_prepend (matched, info);
@@ -1800,12 +1803,14 @@ _gtk_css_selector_tree_builder_free  (GtkCssSelectorTreeBuilder *builder)
 void
 _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,
 				    GtkCssSelector            *selectors,
+				    GtkCssSelectorTree       **selector_match,
 				    gpointer                   match)
 {
   GtkCssSelectorRuleSetInfo *info = g_new0 (GtkCssSelectorRuleSetInfo, 1);
 
   info->match = match;
   info->current_selector = selectors;
+  info->selector_match = selector_match;
   builder->infos = g_list_prepend (builder->infos, info);
 }
 
diff --git a/gtk/gtkcssselectorprivate.h b/gtk/gtkcssselectorprivate.h
index e4c0997..7d811b7 100644
--- a/gtk/gtkcssselectorprivate.h
+++ b/gtk/gtkcssselectorprivate.h
@@ -48,6 +48,7 @@ GPtrArray *_gtk_css_selector_tree_match_all (GtkCssSelectorTree *tree,
 GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new   (void);
 void                       _gtk_css_selector_tree_builder_add   (GtkCssSelectorTreeBuilder *builder,
 								 GtkCssSelector            *selectors,
+								 GtkCssSelectorTree       **selector_match,
 								 gpointer                   match);
 GtkCssSelectorTree *       _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
 void                       _gtk_css_selector_tree_builder_free  (GtkCssSelectorTreeBuilder *builder);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]