static void plugin_action_cb (GtkAction *action, GigglePlugin *plugin) { char *callback_name; GigglePluginCallback callback; const GSignalInvocationHint *hint; hint = g_signal_get_invocation_hint (action); g_signal_handlers_disconnect_by_func (action, plugin_action_cb, plugin); callback_name = plugin_get_callback_name (gtk_action_get_name (action), g_signal_name (hint->signal_id)); callback = plugin_lookup_symbol (plugin, callback_name); if (callback) { g_signal_connect (action, g_signal_name (hint->signal_id), G_CALLBACK (callback), plugin); callback (action, plugin); } g_free (callback_name); }
static void plugin_action_cb (GtkAction *action, GigglePlugin *plugin) { char *callback_name; GigglePluginCallback callback; const GSignalInvocationHint *hint; g_signal_handlers_disconnect_by_func (action, plugin_action_cb, plugin); hint = g_signal_get_invocation_hint (action); callback_name = plugin_get_callback_name (gtk_action_get_name (action), g_signal_name (hint->signal_id)); callback = plugin_lookup_symbol (plugin, callback_name); if (callback) { g_signal_connect (action, g_signal_name (hint->signal_id), G_CALLBACK (callback), plugin); callback (action, plugin); } else if (!strcmp (g_signal_name (hint->signal_id), "activate")) { g_warning ("%s: Cannot find %s()", G_STRFUNC, callback_name); } g_free (callback_name); }
const gchar * get_name_of_current_signal (gpointer instance) { GSignalInvocationHint *ihint; ihint = g_signal_get_invocation_hint (instance); return g_signal_name (ihint->signal_id); }
static void test_a_foo (TestI *self) { GValue args[1] = { { 0, } }; record ("TestA::foo"); g_value_init (&args[0], TEST_TYPE_A); g_value_set_object (&args[0], self); g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); g_signal_chain_from_overridden (args, NULL); g_value_unset (&args[0]); }