css: Track the tree selector matches
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user