seed r186 - trunk/libseed
- From: racarr svn gnome org
- To: svn-commits-list gnome org
- Subject: seed r186 - trunk/libseed
- Date: Sat, 8 Nov 2008 03:07:50 +0000 (UTC)
Author: racarr
Date: Sat Nov 8 03:07:50 2008
New Revision: 186
URL: http://svn.gnome.org/viewvc/seed?rev=186&view=rev
Log:
Some signal rework.
Modified:
trunk/libseed/seed-closure.h
trunk/libseed/seed-signals.c
trunk/libseed/seed-signals.h
Modified: trunk/libseed/seed-closure.h
==============================================================================
--- trunk/libseed/seed-closure.h (original)
+++ trunk/libseed/seed-closure.h Sat Nov 8 03:07:50 2008
@@ -24,10 +24,12 @@
#include "seed-private.h"
typedef struct _SeedClosure {
- GClosure closure;
- JSObjectRef function;
- JSObjectRef object;
- JSObjectRef this;
+ GClosure closure;
+ JSObjectRef function;
+ JSObjectRef object;
+ JSObjectRef this;
+
+ JSValueRef user_data;
} SeedClosure;
typedef struct _SeedNativeClosure {
Modified: trunk/libseed/seed-signals.c
==============================================================================
--- trunk/libseed/seed-signals.c (original)
+++ trunk/libseed/seed-signals.c Sat Nov 8 03:07:50 2008
@@ -112,8 +112,9 @@
SeedClosure *seed_closure = (SeedClosure *) closure;
JSValueRef *args;
gint i;
+
- args = g_newa(JSValueRef, n_param_values);
+ args = g_newa(JSValueRef, n_param_values+1);
for (i = 0; i < n_param_values; i++)
{
@@ -126,8 +127,10 @@
}
+ args[i] = seed_closure->user_data;
+
JSObjectCallAsFunction(eng->context, seed_closure->function,
- seed_closure->this, n_param_values, args, 0);
+ seed_closure->this, n_param_values+1, args, 0);
}
static JSValueRef
@@ -146,22 +149,28 @@
g_error("Signal constructed with invalid parameters"
"in namespace import \n");
- g_assert((argumentCount <= 2));
+ g_assert((argumentCount <= 3));
- closure = g_closure_new_simple(sizeof(SeedClosure), 0);
+ closure = g_closure_new_simple(sizeof(SeedClosure),
+ 0);
g_closure_set_marshal(closure, seed_signal_marshal_func);
- // Losing a ref here. Fix please.
- // g_closure_add_finalize_notifier(closure, NULL, NULL);
+
((SeedClosure *) closure)->function = (JSObjectRef) arguments[0];
((SeedClosure *) closure)->object =
g_object_get_data(privates->object, "js-ref");
- if (argumentCount == 2 && !JSValueIsNull(eng->context, arguments[1]))
+ if (argumentCount >= 2 && !JSValueIsNull(eng->context, arguments[1]))
{
JSValueProtect(eng->context, (JSObjectRef) arguments[1]);
((SeedClosure *) closure)->this = (JSObjectRef) arguments[1];
}
else
((SeedClosure *) closure)->this = 0;
+
+ if (argumentCount == 3)
+ {
+ ((SeedClosure *) closure)->user_data = arguments[2];
+ JSValueProtect(eng->context, arguments[2]);
+ }
JSValueProtect(eng->context, (JSObjectRef) arguments[0]);
Modified: trunk/libseed/seed-signals.h
==============================================================================
--- trunk/libseed/seed-signals.h (original)
+++ trunk/libseed/seed-signals.h Sat Nov 8 03:07:50 2008
@@ -24,10 +24,7 @@
#include "seed-private.h"
-void
-
-
-seed_signal_marshal_func(GClosure * closure,
+void seed_signal_marshal_func(GClosure * closure,
GValue * return_value,
guint n_param_values,
const GValue * param_values,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]