[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 14630685c37463c7ab47b1966a252f7c52c52715..b394587ebc1c9f6d8cc1b30e85ae5356b7709c57 100644 (file)
@@ -473,10 +473,12 @@ JSValueRef emitSignal (JSContextRef context,
   return JSValueMakeBoolean(context, FALSE);
 }
 
+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");