--- a/purple_signals.c Fri Jul 10 17:52:18 2009 -0500
+++ b/purple_signals.c Fri Jul 10 18:23:28 2009 -0500
@@ -61,19 +61,23 @@
*****************************************************************************/
main(gint argc, gchar **argv) {
+ PurpleGSignalHandle *handles[4]; loop = g_main_loop_new(NULL, FALSE);
- purple_g_signal_connect(PURPLE_TYPE_OBJECT, "simple",
- G_CALLBACK(simple_cb_1), NULL);
- purple_g_signal_connect(PURPLE_TYPE_OBJECT, "simple",
- G_CALLBACK(simple_cb_2), NULL);
+ handles[0] = purple_g_signal_connect(PURPLE_TYPE_OBJECT, "simple", + G_CALLBACK(simple_cb_1), NULL); + handles[1] = purple_g_signal_connect(PURPLE_TYPE_OBJECT, "simple", + G_CALLBACK(simple_cb_2), NULL); - purple_g_signal_connect(PURPLE_TYPE_OBJECT, "boolean-return",
- G_CALLBACK(boolean_return_cb_1), NULL);
- purple_g_signal_connect(PURPLE_TYPE_OBJECT, "boolean-return",
- G_CALLBACK(boolean_return_cb_2), NULL);
+ handles[2] = purple_g_signal_connect(PURPLE_TYPE_OBJECT, "boolean-return", + G_CALLBACK(boolean_return_cb_1), NULL); + handles[3] = purple_g_signal_connect(PURPLE_TYPE_OBJECT, "boolean-return", + G_CALLBACK(boolean_return_cb_2), NULL); g_timeout_add_seconds(1, timeout_cb, NULL);
@@ -81,6 +85,9 @@
+ for(i = 0; i < (sizeof(handles) / sizeof(handles[0])); i++) + purple_g_signal_disconnect(handles[i]); --- a/signals.c Fri Jul 10 17:52:18 2009 -0500
+++ b/signals.c Fri Jul 10 18:23:28 2009 -0500
@@ -87,6 +87,15 @@
+purple_g_signal_disconnect(PurpleGSignalHandle *handle) { + g_return_if_fail(handle); + g_signal_remove_emission_hook(handle->signal_id, handle->hook_id); + purple_g_signal_handle_free(handle); /******************************************************************************
*****************************************************************************/
--- a/signals.h Fri Jul 10 17:52:18 2009 -0500
+++ b/signals.h Fri Jul 10 18:23:28 2009 -0500
@@ -16,7 +16,7 @@
PurpleGSignalHandle *purple_g_signal_connect(GType t, const gchar *n, GCallback cb, gpointer d);
-gboolean purple_g_signal_disconnect(PurpleGSignalHandle *handle);
+void purple_g_signal_disconnect(PurpleGSignalHandle *handle); GType purple_g_signal_handle_get_gtype(void);
PurpleGSignalHandle *purple_g_signal_handle_new(guint signal_id, gulong hook_id);