css: Track the tree selector matches

This commit is contained in:
Alexander Larsson
2012-11-29 15:29:14 +01:00
parent f678827918
commit 6bec577771
3 changed files with 8 additions and 0 deletions

View File

@ -986,6 +986,7 @@ struct _WidgetPropertyValue {
struct GtkCssRuleset struct GtkCssRuleset
{ {
GtkCssSelector *selector; GtkCssSelector *selector;
GtkCssSelectorTree *selector_match;
WidgetPropertyValue *widget_style; WidgetPropertyValue *widget_style;
PropertyValue *styles; PropertyValue *styles;
GtkBitmask *set_styles; GtkBitmask *set_styles;
@ -2429,6 +2430,7 @@ gtk_css_provider_postprocess (GtkCssProvider *css_provider)
_gtk_css_selector_tree_builder_add (builder, _gtk_css_selector_tree_builder_add (builder,
ruleset->selector, ruleset->selector,
&ruleset->selector_match,
ruleset); ruleset);
} }

View File

@ -1691,6 +1691,7 @@ _gtk_css_selector_tree_free (GtkCssSelectorTree *tree)
typedef struct { typedef struct {
gpointer match; gpointer match;
GtkCssSelector *current_selector; GtkCssSelector *current_selector;
GtkCssSelectorTree **selector_match;
} GtkCssSelectorRuleSetInfo; } GtkCssSelectorRuleSetInfo;
@ -1755,6 +1756,8 @@ subdivide_infos (GList *infos, GtkCssSelectorTree *parent)
if (exact_matches == NULL) if (exact_matches == NULL)
exact_matches = g_ptr_array_new (); exact_matches = g_ptr_array_new ();
g_ptr_array_add (exact_matches, info->match); g_ptr_array_add (exact_matches, info->match);
if (info->selector_match != NULL)
*info->selector_match = tree;
} }
else else
matched = g_list_prepend (matched, info); matched = g_list_prepend (matched, info);
@ -1800,12 +1803,14 @@ _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder)
void void
_gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder, _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,
GtkCssSelector *selectors, GtkCssSelector *selectors,
GtkCssSelectorTree **selector_match,
gpointer match) gpointer match)
{ {
GtkCssSelectorRuleSetInfo *info = g_new0 (GtkCssSelectorRuleSetInfo, 1); GtkCssSelectorRuleSetInfo *info = g_new0 (GtkCssSelectorRuleSetInfo, 1);
info->match = match; info->match = match;
info->current_selector = selectors; info->current_selector = selectors;
info->selector_match = selector_match;
builder->infos = g_list_prepend (builder->infos, info); builder->infos = g_list_prepend (builder->infos, info);
} }

View File

@ -48,6 +48,7 @@ GPtrArray *_gtk_css_selector_tree_match_all (GtkCssSelectorTree *tree,
GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new (void); GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new (void);
void _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder, void _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,
GtkCssSelector *selectors, GtkCssSelector *selectors,
GtkCssSelectorTree **selector_match,
gpointer match); gpointer match);
GtkCssSelectorTree * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder); GtkCssSelectorTree * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
void _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder); void _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder);