[seed] libseed: Construct new JSObjectRefs for GObject wrappers in seed_gobject_constructor_invoked, so tha



commit 943aab02e185cf1e4caa72bad8b4178425aa0d41
Author: Robert Carr <racarr svn gnome org>
Date:   Thu May 21 13:22:48 2009 -0400

    libseed: Construct new JSObjectRefs for GObject wrappers in seed_gobject_constructor_invoked, so that it will be possible to append additional properties
---
 libseed/seed-engine.c |    6 ++++++
 libseed/seed-engine.h |    2 ++
 libseed/seed-types.c  |    8 +++++++-
 3 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/libseed/seed-engine.c b/libseed/seed-engine.c
index 8c3fe9b..069f30a 100644
--- a/libseed/seed-engine.c
+++ b/libseed/seed-engine.c
@@ -41,6 +41,9 @@ GQuark js_ref_quark;
 
 guint seed_debug_flags = 0;	/* global seed debug flag */
 
+__thread JSObjectRef seed_next_gobject_wrapper = NULL;
+
+
 #ifdef SEED_ENABLE_DEBUG
 static const GDebugKey seed_debug_keys[] = {
   {"misc", SEED_DEBUG_MISC},
@@ -195,9 +198,12 @@ seed_gobject_constructor_invoked (JSContextRef ctx,
 
   if (jsprops)
     JSPropertyNameArrayRelease (jsprops);
+  
+  seed_next_gobject_wrapper = seed_make_wrapper_for_type (ctx, type);
 
   gobject = g_object_newv (type, nparams, params);
 
+
   if (G_IS_INITIALLY_UNOWNED (gobject) && 
       !g_object_is_floating(gobject))
     g_object_ref(gobject);
diff --git a/libseed/seed-engine.h b/libseed/seed-engine.h
index a10672d..4030c1a 100644
--- a/libseed/seed-engine.h
+++ b/libseed/seed-engine.h
@@ -31,6 +31,8 @@ extern JSClassRef gobject_named_constructor_class;
 extern JSClassRef seed_struct_constructor_class; 
 extern JSClassRef gobject_init_method_class;
 
+extern __thread JSObjectRef seed_next_gobject_wrapper;
+
 extern JSClassRef seed_callback_class;
 extern SeedEngine *eng;
 
diff --git a/libseed/seed-types.c b/libseed/seed-types.c
index 123048e..03ac2d1 100644
--- a/libseed/seed-types.c
+++ b/libseed/seed-types.c
@@ -95,7 +95,11 @@ seed_wrap_object (JSContextRef ctx, GObject * object)
   if (user_data)
     return user_data;
 
-  js_ref = seed_make_wrapper_for_type (ctx, type);
+  if (seed_next_gobject_wrapper)
+    js_ref = seed_next_gobject_wrapper;
+  else
+    js_ref = seed_make_wrapper_for_type (ctx, type);
+
   JSObjectSetPrivate (js_ref, object);
 
   g_object_set_qdata_full (object, js_ref_quark, (gpointer) js_ref,
@@ -105,6 +109,8 @@ seed_wrap_object (JSContextRef ctx, GObject * object)
   g_object_add_toggle_ref (object, seed_toggle_ref, (gpointer) js_ref);
   
   seed_add_signals_to_object (ctx, js_ref, object);
+  
+  seed_next_gobject_wrapper = NULL;
 
   return js_ref;
 }



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