From 6b85db75559729f06db95fe28c5fb8c9114ee858 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 29 Nov 2012 14:58:08 +0100 Subject: [PATCH] css: Track parent in the css tree nodes This way we can reconstruct matched css rules --- gtk/gtkcssselector.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c index 0beb87f3c1..e3dbd51b3e 100644 --- a/gtk/gtkcssselector.c +++ b/gtk/gtkcssselector.c @@ -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 {