diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 88a1bd4696..358fed2538 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 626b28aa7d..2ede3b437c 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 e4c09976d5..7d811b75d1 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);