[gtk+/gtk-style-context: 176/533] GtkThemingEngine: Add gtk_theming_engine_register_property().



commit 909390444c12c2c5c37450f587f700e631de10f2
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Aug 4 17:51:19 2010 +0200

    GtkThemingEngine: Add gtk_theming_engine_register_property().
    
    This function may be used for custom property registration from
    theming engines. The property names will have the
    -${engine-type-name}-${prop-name} format, the parser has been
    modified to allow properties with '-' as the first char.

 gtk/gtkcssprovider.c   |   32 ++++++++++++++++++++------------
 gtk/gtkthemingengine.c |   19 +++++++++++++++++++
 gtk/gtkthemingengine.h |    6 ++++++
 3 files changed, 45 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 2cb9044..ed9ad45 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -622,6 +622,14 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
         {
           gchar *prop = key;
 
+          /* Properties starting with '-' may be both widget style properties
+           * or custom properties from the theming engine, so check whether
+           * the type is registered or not.
+           */
+          if (prop[0] == '-' &&
+              !gtk_style_set_lookup_property (prop, NULL, NULL))
+            continue;
+
           if (info->state == GTK_STATE_NORMAL)
             gtk_style_set_set_default (set, key, value);
           else
@@ -1423,18 +1431,7 @@ parse_rule (GtkCssProvider *css_provider,
 
       value_str = g_strstrip (scanner->value.v_identifier);
 
-      if (prop[0] == '-' &&
-          g_ascii_isupper (prop[1]))
-        {
-          GValue *val;
-
-          val = g_slice_new0 (GValue);
-          g_value_init (val, G_TYPE_STRING);
-          g_value_set_string (val, value_str);
-
-          g_hash_table_insert (priv->cur_properties, prop, val);
-        }
-      else if (gtk_style_set_lookup_property (prop, &prop_type, &parse_func))
+      if (gtk_style_set_lookup_property (prop, &prop_type, &parse_func))
         {
           GValue *val;
 
@@ -1464,6 +1461,17 @@ parse_rule (GtkCssProvider *css_provider,
               return G_TOKEN_IDENTIFIER;
             }
         }
+      else if (prop[0] == '-' &&
+               g_ascii_isupper (prop[1]))
+        {
+          GValue *val;
+
+          val = g_slice_new0 (GValue);
+          g_value_init (val, G_TYPE_STRING);
+          g_value_set_string (val, value_str);
+
+          g_hash_table_insert (priv->cur_properties, prop, val);
+        }
       else
         g_free (prop);
 
diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c
index 3d43b2f..fa65ab6 100644
--- a/gtk/gtkthemingengine.c
+++ b/gtk/gtkthemingengine.c
@@ -195,6 +195,25 @@ _gtk_theming_engine_set_context (GtkThemingEngine *engine,
 }
 
 void
+gtk_theming_engine_register_property (GtkThemingEngine       *engine,
+                                      const gchar            *property_name,
+                                      GType                   type,
+                                      const GValue           *default_value,
+                                      GtkStylePropertyParser  parse_func)
+{
+  gchar *name;
+
+  g_return_if_fail (GTK_IS_THEMING_ENGINE (engine));
+  g_return_if_fail (property_name != NULL);
+  g_return_if_fail (type != G_TYPE_INVALID);
+  g_return_if_fail (default_value != NULL && G_IS_VALUE (default_value));
+
+  name = g_strdup_printf ("-%s-%s", G_OBJECT_TYPE_NAME (engine), property_name);
+  gtk_style_set_register_property (name, type, default_value, parse_func);
+  g_free (name);
+}
+
+void
 gtk_theming_engine_get_property (GtkThemingEngine *engine,
                                  const gchar      *property,
                                  GtkStateType      state,
diff --git a/gtk/gtkthemingengine.h b/gtk/gtkthemingengine.h
index 1191d5a..2e31a29 100644
--- a/gtk/gtkthemingengine.h
+++ b/gtk/gtkthemingengine.h
@@ -139,6 +139,12 @@ GType gtk_theming_engine_get_type (void) G_GNUC_CONST;
 void _gtk_theming_engine_set_context (GtkThemingEngine *engine,
                                       GtkStyleContext  *context);
 
+void gtk_theming_engine_register_property (GtkThemingEngine       *engine,
+                                           const gchar            *property_name,
+                                           GType                   type,
+                                           const GValue           *default_value,
+                                           GtkStylePropertyParser  parse_func);
+
 void gtk_theming_engine_get_property (GtkThemingEngine *engine,
                                       const gchar      *property,
                                       GtkStateType      state,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]