--- a/finch/gntblist.c Sat Aug 10 23:24:36 2013 +0530 +++ b/finch/gntblist.c Sat Aug 10 23:51:48 2013 +0530 @@ -2450,53 +2450,25 @@ } static void -build_plugin_actions(GntMenuItem *item, PurplePlugin *plugin) +build_plugin_actions(GntMenuItem *item, PurplePlugin *plugin, gpointer context) { GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP); - GList *actions, *l; + GList *actions; GntMenuItem *menuitem; - actions = purple_plugin_get_actions(plugin); - gnt_menuitem_set_submenu(item, GNT_MENU(sub)); - for (l = actions; l; l = l->next) { - if (l->data) { - PurplePluginAction *action = l->data; + for (actions = PURPLE_PLUGIN_ACTIONS(plugin, context); actions; + actions = g_list_delete_link(actions, actions)) { + if (actions->data) { + PurplePluginAction *action = actions->data; + action->plugin = plugin; + action->context = context; menuitem = gnt_menuitem_new(action->label); gnt_menu_add_item(GNT_MENU(sub), menuitem); gnt_menuitem_set_callback(menuitem, plugin_action, action); - g_object_set_data(G_OBJECT(menuitem), "plugin_action", action); - } - } -} - -static void -protocol_action(GntMenuItem *item, gpointer data) -{ - PurpleProtocolAction *action = data; - if (action && action->callback) - action->callback(action); -} - -static void -build_protocol_actions(GntMenuItem *item, PurplePluginProtocolInfo *prpl_info, - PurpleConnection *gc) -{ - GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP); - GList *l; - GntMenuItem *menuitem; - - gnt_menuitem_set_submenu(item, GNT_MENU(sub)); - for (l = prpl_info->actions; l; l = l->next) { - if (l->data) { - PurpleProtocolAction *action = l->data; - action->connection = gc; - menuitem = gnt_menuitem_new(action->label); - gnt_menu_add_item(GNT_MENU(sub), menuitem); - - gnt_menuitem_set_callback(menuitem, protocol_action, action); - g_object_set_data(G_OBJECT(menuitem), "protocol_action", action); + g_object_set_data_full(G_OBJECT(menuitem), "plugin_action", + action, (GDestroyNotify)purple_plugin_action_free); } } } @@ -2565,16 +2537,17 @@ gnt_menuitem_set_submenu(plg, GNT_MENU(sub)); for (iter = purple_plugins_get_loaded(); iter; iter = iter->next) { - PurplePlugin *plugin = PURPLE_PLUGIN(iter->data); - PurplePluginInfo *plugin_info = purple_plugin_get_info(plugin); + PurplePlugin *plugin = iter->data; GntMenuItem *item; - - if (!purple_plugin_get_actions(plugin)) + if (PURPLE_IS_PROTOCOL_PLUGIN(plugin)) + continue; + + if (!PURPLE_PLUGIN_HAS_ACTIONS(plugin)) continue; - item = gnt_menuitem_new(_(purple_plugin_info_get_name(plugin_info))); + item = gnt_menuitem_new(_(plugin->info->name)); gnt_menu_add_item(GNT_MENU(sub), item); - build_plugin_actions(item, plugin); + build_plugin_actions(item, plugin, NULL); } } @@ -2599,16 +2572,16 @@ iter = g_list_delete_link(iter, iter)) { PurpleAccount *account = iter->data; PurpleConnection *gc = purple_account_get_connection(account); - PurplePluginProtocolInfo *prpl_info; + PurplePlugin *prpl; if (!gc || !PURPLE_CONNECTION_IS_CONNECTED(gc)) continue; - prpl_info = purple_connection_get_protocol_info(gc); - - if (prpl_info->actions != NULL) { + prpl = purple_connection_get_prpl(gc); + + if (PURPLE_PLUGIN_HAS_ACTIONS(prpl)) { item = gnt_menuitem_new(purple_account_get_username(account)); gnt_menu_add_item(GNT_MENU(sub), item); - build_protocol_actions(item, prpl_info, gc); + build_plugin_actions(item, prpl, gc); } } }