[seed] libseed: Construct new JSObjectRefs for GObject wrappers in seed_gobject_constructor_invoked, so tha
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] libseed: Construct new JSObjectRefs for GObject wrappers in seed_gobject_constructor_invoked, so tha
- Date: Sat, 23 May 2009 16:24:40 -0400 (EDT)
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]