From 19eb1614de30042ae39ca95c854803e03f3a6bae Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 19 Jul 2014 23:26:12 +0200 Subject: cssmatcher: Use widget path's state Don't take a state when constructing the CSS matcher. Instead, rely on the newly introduced state in the widget path. This way, the state can be queried not only on the first element, but on all elements of the widget path. --- gtk/gtkcssprovider.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'gtk/gtkcssprovider.c') diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index c8e76ff74b..429713b363 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -40,6 +40,7 @@ #include "gtkstylepropertiesprivate.h" #include "gtkstylepropertyprivate.h" #include "gtkstyleproviderprivate.h" +#include "gtkwidgetpath.h" #include "gtkbindings.h" #include "gtkmarshalers.h" #include "gtkprivate.h" @@ -1668,8 +1669,21 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider, gchar *prop_name; gint i; - if (!_gtk_css_matcher_init (&matcher, path, state)) - return FALSE; + if (state == gtk_widget_path_iter_get_state (path, -1)) + { + gtk_widget_path_ref (path); + } + else + { + path = gtk_widget_path_copy (path); + gtk_widget_path_iter_set_state (path, -1, state); + } + + if (!_gtk_css_matcher_init (&matcher, path)) + { + gtk_widget_path_unref (path); + return FALSE; + } tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher); verify_tree_match_results (css_provider, &matcher, tree_rules); @@ -1712,6 +1726,7 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider, g_free (prop_name); g_ptr_array_free (tree_rules, TRUE); + gtk_widget_path_unref (path); return found; } -- cgit v1.2.1