[gtk+/gtk-style-context: 176/540] GtkThemingEngine: Add gtk_theming_engine_register_property().
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-style-context: 176/540] GtkThemingEngine: Add gtk_theming_engine_register_property().
- Date: Fri, 3 Dec 2010 02:50:55 +0000 (UTC)
commit 0b73ce52f4b2acb655ee2bd1b837b43544fa91f0
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]