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