[gtk+/wip/css: 15/37] css: Add a check function for specified types
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/css: 15/37] css: Add a check function for specified types
- Date: Mon, 23 Jan 2012 15:36:56 +0000 (UTC)
commit a0c9c75fb1fe55805091dfa7a0474ac4e2be0deb
Author: Benjamin Otte <otte redhat com>
Date: Sun Jan 15 02:30:26 2012 +0100
css: Add a check function for specified types
... and use it.
It seems kinda necessary for the refactoring I'm about to do...
gtk/gtkcssprovider.c | 3 +++
gtk/gtkcssstyleproperty.c | 23 +++++++++++++++++++++++
gtk/gtkcssstylepropertyprivate.h | 2 ++
3 files changed, 28 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 5285d29..72c3749 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -1211,6 +1211,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 348ea0d..ad713ec 100644
--- a/gtk/gtkcssstyleproperty.c
+++ b/gtk/gtkcssstyleproperty.c
@@ -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
diff --git a/gtk/gtkcssstylepropertyprivate.h b/gtk/gtkcssstylepropertyprivate.h
index 84cb1d2..d207595 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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]