[gegl] Translate enums in gegl_node_set_property
- From: Daniel Sabo <daniels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] Translate enums in gegl_node_set_property
- Date: Fri, 7 Jun 2013 05:51:22 +0000 (UTC)
commit 204e120b411d8f8e77cff1388e2a0422a486f068
Author: Daniel Sabo <DanielSabo gmail com>
Date: Thu Jun 6 21:27:45 2013 -0700
Translate enums in gegl_node_set_property
gegl/graph/gegl-node.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/gegl/graph/gegl-node.c b/gegl/graph/gegl-node.c
index 2a42d96..068c0ec 100644
--- a/gegl/graph/gegl-node.c
+++ b/gegl/graph/gegl-node.c
@@ -1365,6 +1365,30 @@ gegl_node_set_property (GeglNode *self,
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (self->operation), property_name);
if (pspec)
{
+ if (G_IS_PARAM_SPEC_ENUM (pspec) && G_VALUE_HOLDS (value, G_TYPE_STRING))
+ {
+ GEnumClass *enum_class = G_PARAM_SPEC_ENUM (pspec)->enum_class;
+ const gchar *value_string = g_value_get_string (value);
+ GEnumValue *enum_value = NULL;
+
+ enum_value = g_enum_get_value_by_name (enum_class, value_string);
+ if (!enum_value)
+ enum_value = g_enum_get_value_by_nick (enum_class, value_string);
+
+ if (enum_value)
+ {
+ GValue value = G_VALUE_INIT;
+ g_value_init (&value, G_TYPE_FROM_CLASS (&enum_class->g_type_class));
+ g_value_set_enum (&value, enum_value->value);
+ g_object_set_property (G_OBJECT (self->operation), property_name, &value);
+ g_value_unset (&value);
+ return;
+ }
+
+ g_warning ("Could not convert %s to a valid enum value for %s",
+ value_string,
+ property_name);
+ }
g_object_set_property (G_OBJECT (self->operation), property_name, value);
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]