grim/purple-signals

implemented purple_g_signal_disconnect
default tip
2009-07-10, Gary Kramlich
1097c103e468
Parents 8479c38beb30
Children
implemented purple_g_signal_disconnect
  • +15 -8
    purple_signals.c
  • +9 -0
    signals.c
  • +1 -1
    signals.h
  • --- 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 @@
    *****************************************************************************/
    gint
    main(gint argc, gchar **argv) {
    + PurpleGSignalHandle *handles[4];
    + gint i = 0;
    +
    g_type_init();
    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 @@
    g_main_loop_unref(loop);
    + for(i = 0; i < (sizeof(handles) / sizeof(handles[0])); i++)
    + purple_g_signal_disconnect(handles[i]);
    +
    return 0;
    }
    --- 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 @@
    return handle;
    }
    +void
    +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);
    +}
    +
    /******************************************************************************
    * PurpleSignalHandle API
    *****************************************************************************/
    --- 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 @@
    G_BEGIN_DECLS
    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);