css: Add a check function for specified types

... and use it.

It seems kinda necessary for the refactoring I'm about to do...
This commit is contained in:
Benjamin Otte 2012-01-15 02:30:26 +01:00
parent 9551f542bd
commit a81ac3d5cd
3 changed files with 28 additions and 0 deletions

View File

@ -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);

View File

@ -28,6 +28,7 @@
#include "gtkprivatetypebuiltins.h"
#include "gtkstylepropertiesprivate.h"
#include <cairo-gobject.h>
#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

View File

@ -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,