[seed: 5/5] Validate enum types in property setting



commit fd9f3bc2f3743a9870909214b1573fab040fc425
Author: Robert Carr <racarr mireia (none)>
Date:   Tue Mar 24 23:05:25 2009 -0400

    Validate enum types in property setting
---
 libseed/seed-signals.c |    2 +-
 libseed/seed-types.c   |   24 ++++++++++++++++++++++--
 libseed/seed-types.h   |    2 ++
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/libseed/seed-signals.c b/libseed/seed-signals.c
index d0ff9db..7326991 100644
--- a/libseed/seed-signals.c
+++ b/libseed/seed-signals.c
@@ -397,7 +397,7 @@ seed_gobject_signal_connect_on_property (JSContextRef ctx,
 JSStaticFunction signal_static_functions[] =
   { {"connect", seed_gobject_signal_connect_on_property, 0}
 ,
-{"emit", seed_gobject_signal_emit, 0}
+    {"emit", seed_gobject_signal_emit, 0}
 ,
 {0, 0, 0}
 };
diff --git a/libseed/seed-types.c b/libseed/seed-types.c
index bc7d798..da61852 100644
--- a/libseed/seed-types.c
+++ b/libseed/seed-types.c
@@ -1118,13 +1118,13 @@ seed_gvalue_from_seed_value (JSContextRef ctx,
   if (g_type_is_a (type, G_TYPE_ENUM) && JSValueIsNumber (ctx, val))
     {
       g_value_init (ret, type);
-      ret->data[0].v_long = seed_value_to_long (ctx, val, exception);
+      g_value_set_enum (ret, seed_value_to_long (ctx, val, exception));
       return TRUE;
     }
   else if (g_type_is_a (type, G_TYPE_FLAGS) && JSValueIsNumber (ctx, val))
     {
       g_value_init (ret, type);
-      ret->data[0].v_long = seed_value_to_long (ctx, val, exception);
+      g_value_set_flags (ret, seed_value_to_long (ctx, val, exception));
       return TRUE;
     }
   else if (g_type_is_a (type, G_TYPE_OBJECT)
@@ -1894,3 +1894,23 @@ seed_value_from_object (JSContextRef ctx,
   else
     return seed_wrap_object (ctx, val);
 }
+
+gboolean
+seed_validate_enum (GIEnumInfo *info,
+		    long val)
+{
+  gint n, i;
+  
+  n = g_enum_info_get_n_values (info);
+  for (i = 0; i < n; i++)
+    {
+      GIValueInfo *value_info = g_enum_info_get_value (info, i);
+      glong value = g_value_info_get_value (value_info);
+
+      g_base_info_unref ((GIBaseInfo *)value_info);
+      if (value == val)
+	return TRUE;
+    }
+  
+  return FALSE;
+}
diff --git a/libseed/seed-types.h b/libseed/seed-types.h
index 6af369a..f2e578f 100644
--- a/libseed/seed-types.h
+++ b/libseed/seed-types.h
@@ -142,4 +142,6 @@ JSValueRef seed_value_from_object (JSContextRef ctx,
 
 void seed_toggle_ref (gpointer data, GObject * object, gboolean is_last_ref);
 
+gboolean seed_validate_enum (GIEnumInfo *info, long val);
+
 #endif



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