[jscorebus] Make the DBus singleton constructible to match XPCOM side better
authorKalle Vahlman <kalle.vahlman@movial.com>
Wed, 15 Apr 2009 08:25:15 +0000 (11:25 +0300)
committerKalle Vahlman <kalle.vahlman@movial.com>
Wed, 15 Apr 2009 08:25:15 +0000 (11:25 +0300)
jscorebus/jscorebus.c

index 1463068..b394587 100644 (file)
@@ -474,9 +474,11 @@ JSValueRef emitSignal (JSContextRef context,
 }
 
 static
+JSGlobalContextRef gcontext = NULL;
+
+static
 void dbus_finalize(JSObjectRef object)
 {
-  g_debug(G_STRFUNC);
   JSObjectSetPrivate(object, NULL);
 }
 
@@ -504,6 +506,13 @@ JSStaticFunction dbus_jsclass_staticfuncs[] =
   { NULL, NULL, 0 }
 };
 
+static
+JSObjectRef dbus_constructor (JSContextRef context,
+                              JSObjectRef constructor,
+                              size_t argumentCount,
+                              const JSValueRef arguments[],
+                              JSValueRef* exception);
+
 /* The DBus Class */
 static const
 JSClassDefinition dbus_jsclass_def =
@@ -531,6 +540,21 @@ JSClassDefinition dbus_jsclass_def =
   NULL
 };
 
+static
+JSObjectRef dbus_constructor (JSContextRef context,
+                              JSObjectRef constructor,
+                              size_t argumentCount,
+                              const JSValueRef arguments[],
+                              JSValueRef* exception)
+{
+  JSClassRef dbus_class;
+  dbus_class = JSClassCreate(&dbus_jsclass_def);
+
+  return JSObjectMake(context,
+                      (JSClassRef)jsclass_lookup(&dbus_jsclass_def),
+                      gcontext);
+}
+
 /**
  * Public API
  */
@@ -540,6 +564,8 @@ void jscorebus_init(DBusConnection *psession, DBusConnection *psystem)
   session = psession;
   system = psystem;
 
+  jsclassdef_insert("DBus", &dbus_jsclass_def);
+
 #define INIT_NUMBER_CLASS(name, def, type, num) \
   jsclassdef_insert(name, def); \
   jscorebus_number_class_names[num] = name; \
@@ -567,12 +593,11 @@ void jscorebus_export(JSGlobalContextRef context)
   JSObjectRef globalObject;
   JSObjectRef dbus;
   JSStringRef jsstr;
-  JSClassRef dbus_jsclass;
 
-//  global_context = context;
-    
-  dbus_jsclass = JSClassCreate(&dbus_jsclass_def);
-  dbus = JSObjectMake(context, dbus_jsclass, context);
+  dbus = JSObjectMakeConstructor(context,
+                                 (JSClassRef)jsclass_lookup(&dbus_jsclass_def),
+                                 dbus_constructor);
+  gcontext = context;
 
   globalObject = JSContextGetGlobalObject(context);
   jsstr = JSStringCreateWithUTF8CString("DBus");