diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 7d2f18329d..927d345b68 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1212,6 +1212,9 @@ gtk_css_ruleset_add (GtkCssRuleset *ruleset, } else if (GTK_IS_CSS_STYLE_PROPERTY (prop)) { + g_return_if_fail (_gtk_css_style_property_is_specified_type (GTK_CSS_STYLE_PROPERTY (prop), + G_VALUE_TYPE (&value->value))); + _gtk_bitmask_set (ruleset->set_styles, _gtk_css_style_property_get_id (GTK_CSS_STYLE_PROPERTY (prop)), TRUE); diff --git a/gtk/gtkcssstyleproperty.c b/gtk/gtkcssstyleproperty.c index 348ea0d163..ad713ec422 100644 --- a/gtk/gtkcssstyleproperty.c +++ b/gtk/gtkcssstyleproperty.c @@ -28,6 +28,7 @@ #include "gtkprivatetypebuiltins.h" #include "gtkstylepropertiesprivate.h" +#include #include "gtkcssimagegradientprivate.h" #include "gtkcssimageprivate.h" @@ -441,6 +442,28 @@ _gtk_css_style_property_get_specified_type (GtkCssStyleProperty *property) return G_VALUE_TYPE (&property->initial_value); } +gboolean +_gtk_css_style_property_is_specified_type (GtkCssStyleProperty *property, + GType type) +{ + g_return_val_if_fail (GTK_IS_CSS_STYLE_PROPERTY (property), FALSE); + + /* If it's our specified type, of course it's valid */ + if (type == G_VALUE_TYPE (&property->initial_value)) + return TRUE; + + /* The special values 'inherit' and 'initial' are always valid */ + if (type == GTK_TYPE_CSS_SPECIAL_VALUE) + return TRUE; + + /* XXX: Someone needs to fix that legacy */ + if (G_VALUE_TYPE (&property->initial_value) == CAIRO_GOBJECT_TYPE_PATTERN && + type == GTK_TYPE_GRADIENT) + return TRUE; + + return FALSE; +} + /** * _gtk_css_style_property_compute_value: * @property: the property diff --git a/gtk/gtkcssstylepropertyprivate.h b/gtk/gtkcssstylepropertyprivate.h index 84cb1d2d8c..d207595b34 100644 --- a/gtk/gtkcssstylepropertyprivate.h +++ b/gtk/gtkcssstylepropertyprivate.h @@ -80,6 +80,8 @@ const GValue * _gtk_css_style_property_get_initial_value (GtkCssStyleProperty *property); GType _gtk_css_style_property_get_computed_type (GtkCssStyleProperty *property); GType _gtk_css_style_property_get_specified_type (GtkCssStyleProperty *property); +gboolean _gtk_css_style_property_is_specified_type (GtkCssStyleProperty *property, + GType type); void _gtk_css_style_property_compute_value (GtkCssStyleProperty *property, GValue *computed,