--- a/marshallers.list Fri Jul 10 07:41:13 2009 -0500
+++ b/marshallers.list Fri Jul 10 08:06:50 2009 -0500
@@ -1,2 +1,2 @@
--- a/object.c Fri Jul 10 07:41:13 2009 -0500
+++ b/object.c Fri Jul 10 08:06:50 2009 -0500
@@ -35,7 +35,7 @@
G_STRUCT_OFFSET(PurpleObjectClass, boolean_ret_signal),
- purple_marshal_BOOLEAN__OBJECT,
+ purple_marshal_BOOLEAN__VOID, @@ -54,10 +54,10 @@
g_signal_emit(obj, signals[SIG_SIMPLE], 0);
printf("emitted simple\n");
-// g_signal_emit_by_name(obj, "boolean-return", &ret, NULL);
-// printf("emitted boolean\n");
+ g_signal_emit_by_name(obj, "boolean-return", &ret, NULL); + printf("emitted boolean\n"); -// printf("boolean return was '%s'\n", (ret) ? "True" : "False");
+ printf("boolean return was '%s'\n", (ret) ? "True" : "False"); --- a/signals.c Fri Jul 10 07:41:13 2009 -0500
+++ b/signals.c Fri Jul 10 08:06:50 2009 -0500
@@ -8,6 +8,7 @@
@@ -36,7 +37,16 @@
closure = g_cclosure_new(sd->callback, sd->user_data, NULL);
g_signal_connect_closure_by_id(obj, hint->signal_id, sd->detail, closure, after);
- g_closure_invoke(closure, NULL, n_params, pvalues, hint);
+ if(sd->return_type != G_TYPE_NONE) { + g_value_init(&ret, sd->return_type); + g_closure_invoke(closure, &ret, n_params, pvalues, hint); + g_closure_invoke(closure, NULL, n_params, pvalues, hint); @@ -44,6 +54,7 @@
purple_g_signal_connect(GType t, const gchar *n, GCallback cb, gpointer d) {
PurpleSignalData *sd = NULL;
@@ -57,13 +68,15 @@
- printf("sig_id: %d; detail: %d\n", sig_id, detail);
+ g_signal_query(sig_id, &query); sd = g_new0(PurpleSignalData, 1);
+ sd->return_type = query.return_type; ret = g_signal_add_emission_hook(sig_id, detail,
purple_signal_emission_hook, sd, g_free);