summaryrefslogtreecommitdiff
path: root/gtk/gtkstylecontext.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-01-24 20:52:34 +0100
committerBenjamin Otte <otte@redhat.com>2015-03-18 15:23:29 +0100
commit6f99a3cdb0cd6b8bc6c31cffde31ad7257915b66 (patch)
treee1c6dbfce72e743283e6cf2ff71e412e61d18421 /gtk/gtkstylecontext.c
parent0e3da2f7cfcc55e8243941011f40f9e85ff15410 (diff)
downloadgtk+-6f99a3cdb0cd6b8bc6c31cffde31ad7257915b66.tar.gz
stylecontext: Change arguments for build_properties
Instead of passing the style declaration, take the node's style declaration. Add arguments to allow overriding the state for the one case where this didn't work.
Diffstat (limited to 'gtk/gtkstylecontext.c')
-rw-r--r--gtk/gtkstylecontext.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 714dd998ee..260aafa43c 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -793,22 +793,29 @@ update_properties (GtkStyleContext *context,
static GtkCssStyle *
build_properties (GtkStyleContext *context,
GtkCssNode *cssnode,
- const GtkCssNodeDeclaration *decl)
+ gboolean override_state,
+ GtkStateFlags state)
{
GtkStyleContextPrivate *priv;
+ const GtkCssNodeDeclaration *decl;
GtkCssMatcher matcher;
GtkWidgetPath *path;
GtkCssStyle *parent;
GtkCssStyle *style;
priv = context->priv;
+ decl = gtk_css_node_get_declaration (cssnode);
parent = gtk_css_node_get_parent_style (context, cssnode);
style = lookup_in_global_parent_cache (context, parent, decl);
if (style)
return g_object_ref (style);
- path = create_query_path (context, decl, cssnode == gtk_style_context_get_root (context));
+ path = create_query_path (context,
+ decl,
+ cssnode == gtk_style_context_get_root (context));
+ if (override_state)
+ gtk_widget_path_iter_set_state (path, -1, state);
if (_gtk_css_matcher_init (&matcher, path))
style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
@@ -841,7 +848,7 @@ gtk_style_context_lookup_style (GtkStyleContext *context)
if (values)
return values;
- values = build_properties (context, cssnode, gtk_css_node_get_declaration (cssnode));
+ values = build_properties (context, cssnode, FALSE, 0);
gtk_css_node_set_style (cssnode, values);
g_object_unref (values);
@@ -866,7 +873,7 @@ gtk_style_context_lookup_style_for_state (GtkStyleContext *context,
gtk_css_node_declaration_set_state (&decl, state);
values = build_properties (context,
context->priv->cssnode,
- decl);
+ TRUE, state);
gtk_css_node_declaration_unref (decl);
return values;
@@ -2955,7 +2962,7 @@ _gtk_style_context_validate (GtkStyleContext *context,
{
GtkCssStyle *style, *static_style;
- static_style = build_properties (context, cssnode, gtk_css_node_get_declaration (cssnode));
+ static_style = build_properties (context, cssnode, FALSE, 0);
style = gtk_css_animated_style_new (static_style,
priv->parent ? gtk_style_context_lookup_style (priv->parent) : NULL,
timestamp,
@@ -3083,7 +3090,8 @@ gtk_style_context_invalidate (GtkStyleContext *context)
root = gtk_style_context_get_root (context);
style = build_properties (context,
root,
- gtk_css_node_get_declaration (root));
+ FALSE,
+ 0);
gtk_css_node_set_style (root, style);
g_object_unref (style);