- GType value_type;
- GValue *val;
-
- value_type = G_VALUE_TYPE (value);
-
- if (style_prop->pspec->value_type == GDK_TYPE_RGBA ||
- style_prop->pspec->value_type == GDK_TYPE_COLOR)
- {
- /* Allow GtkSymbolicColor as well */
- g_return_if_fail (value_type == GDK_TYPE_RGBA ||
- value_type == GDK_TYPE_COLOR ||
- value_type == GTK_TYPE_SYMBOLIC_COLOR);
- }
- else if (style_prop->pspec->value_type == CAIRO_GOBJECT_TYPE_PATTERN)
- {
- /* Allow GtkGradient as a substitute */
- g_return_if_fail (value_type == CAIRO_GOBJECT_TYPE_PATTERN ||
- value_type == GTK_TYPE_GRADIENT);
- }
- else if (style_prop->pspec->value_type == G_TYPE_INT)
- {
- g_return_if_fail (value_type == G_TYPE_INT ||
- value_type == GTK_TYPE_CSS_BORDER_RADIUS);
- }
- else
- g_return_if_fail (style_prop->pspec->value_type == value_type);
-
- if (_gtk_style_property_is_shorthand (style_prop))
- {
- GParameter *parameters;
- guint i, n_parameters;
-
- parameters = _gtk_style_property_unpack (style_prop, value, &n_parameters);
-
- for (i = 0; i < n_parameters; i++)
- {
- gtk_style_properties_set_property (props,
- parameters[i].name,
- state,
- ¶meters[i].value);
- g_value_unset (¶meters[i].value);
- }
- g_free (parameters);
- return;
- }