diff options
author | Benjamin Otte <otte@redhat.com> | 2014-07-19 23:26:12 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2014-07-19 23:42:39 +0200 |
commit | 19eb1614de30042ae39ca95c854803e03f3a6bae (patch) | |
tree | f8ede6598c4997902c4e28d04d1ac7cc2601f548 /gtk/gtkcssprovider.c | |
parent | be09e0ed4ac3c98d2973f98e10d96f86832fb49f (diff) | |
download | gtk+-19eb1614de30042ae39ca95c854803e03f3a6bae.tar.gz |
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.
Diffstat (limited to 'gtk/gtkcssprovider.c')
-rw-r--r-- | gtk/gtkcssprovider.c | 19 |
1 files changed, 17 insertions, 2 deletions
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; } |