[gtk+/wip/css: 15/22] css: Add a check function for specified types



commit ca5733215961e244837edc4045ed95742ae2210b
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]