From ea6470e31a6884a7243e9cd4df9734f1dc4828b9 Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Sat, 19 Jun 2010 16:13:58 -0400 Subject: [PATCH] GSettings: complete support for enum binding --- gio/gsettings-mapping.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gio/gsettings-mapping.c b/gio/gsettings-mapping.c index cf1ac11..bbca56f 100644 --- a/gio/gsettings-mapping.c +++ b/gio/gsettings-mapping.c @@ -446,6 +446,28 @@ g_settings_get_mapping (GValue *value, g_value_set_string (value, g_variant_get_string (variant, NULL)); return TRUE; } + + else if (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING) && + G_VALUE_HOLDS_ENUM (value)) + { + GEnumClass *eclass; + GEnumValue *evalue; + const gchar *nick; + + eclass = g_type_class_ref (G_VALUE_TYPE (value)); + nick = g_variant_get_string (variant, NULL); + evalue = g_enum_get_value_by_nick (eclass, nick); + g_type_class_unref (eclass); + + if (evalue) + { + g_value_set_enum (value, evalue->value); + return TRUE; + } + + g_warning ("Unable to lookup enum nick '%s' via GType\n", nick); + return FALSE; + } } else if (g_variant_is_of_type (variant, G_VARIANT_TYPE ("ay"))) { -- 2.7.4