]> Pileus Git - ~andy/gtk/commitdiff
css: Track parent in the css tree nodes
authorAlexander Larsson <alexl@redhat.com>
Thu, 29 Nov 2012 13:58:08 +0000 (14:58 +0100)
committerAlexander Larsson <alexl@redhat.com>
Fri, 30 Nov 2012 13:53:30 +0000 (14:53 +0100)
This way we can reconstruct matched css rules

gtk/gtkcssselector.c

index 0beb87f3c1adfb55458fd1c1500faccd62bea05e..e3dbd51b3ecd47b8a6f054422c9d31f269a894b8 100644 (file)
@@ -57,6 +57,7 @@ struct _GtkCssSelector
 struct _GtkCssSelectorTree
 {
   GtkCssSelector selector;
+  GtkCssSelectorTree *parent;
   GtkCssSelectorTree *previous;
   GtkCssSelectorTree *siblings;
   gpointer *matches; /* pointers that we return as matches if selector matches */
@@ -1694,7 +1695,7 @@ typedef struct {
 
 
 static GtkCssSelectorTree *
-subdivide_infos (GList *infos)
+subdivide_infos (GList *infos, GtkCssSelectorTree *parent)
 {
   GHashTable *ht = gtk_css_selectors_count_initial_init ();
   GList *l;
@@ -1737,6 +1738,7 @@ subdivide_infos (GList *infos)
   remaining = NULL;
 
   tree = g_new0 (GtkCssSelectorTree, 1);
+  tree->parent = parent;
   tree->selector = *max_selector;
 
   exact_matches = NULL;
@@ -1770,10 +1772,10 @@ subdivide_infos (GList *infos)
     }
 
   if (matched)
-    tree->previous = subdivide_infos (matched);
+    tree->previous = subdivide_infos (matched, tree);
 
   if (remaining)
-    tree->siblings = subdivide_infos (remaining);
+    tree->siblings = subdivide_infos (remaining, parent);
 
   return tree;
 }
@@ -1812,7 +1814,7 @@ _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
 {
   GtkCssSelectorTree *tree;
 
-  tree = subdivide_infos (builder->infos);
+  tree = subdivide_infos (builder->infos, NULL);
 
 #ifdef PRINT_TREE
   {