diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index 2cb5ac1079..fbc0fc211d 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -58,15 +58,27 @@ restart: if (G_VALUE_HOLDS (specified, GTK_TYPE_CSS_SPECIAL_VALUE)) { - GtkStyleContext *parent = gtk_style_context_get_parent (context); g_assert (g_value_get_enum (specified) == GTK_CSS_CURRENT_COLOR); - if (parent) - g_value_copy (_gtk_style_context_peek_property (parent, "color"), computed); + /* The computed value of the ‘currentColor’ keyword is the computed + * value of the ‘color’ property. If the ‘currentColor’ keyword is + * set on the ‘color’ property itself, it is treated as ‘color: inherit’. + */ + if (g_str_equal (_gtk_style_property_get_name (GTK_STYLE_PROPERTY (property)), "color")) + { + GtkStyleContext *parent = gtk_style_context_get_parent (context); + + if (parent) + g_value_copy (_gtk_style_context_peek_property (parent, "color"), computed); + else + _gtk_css_style_compute_value (computed, + context, + _gtk_css_style_property_get_initial_value (property)); + } else - _gtk_css_style_compute_value (computed, - context, - _gtk_css_style_property_get_initial_value (property)); + { + g_value_copy (_gtk_style_context_peek_property (context, "color"), computed); + } } else if (G_VALUE_HOLDS (specified, GTK_TYPE_SYMBOLIC_COLOR)) {