# HG changeset patch # User Elliott Sales de Andrade # Date 1248745842 0 # Node ID 3abf90b398fc2e2de02478ba9efe274026d24b61 # Parent 7b00e8c1ada87dd904c0f523f91bdfe5fe44e67c Re-enable the plugin sub-menus. Even though it's similar to the accounts code, it seems to work correctly, so there must be some other bug there. diff -r 7b00e8c1ada8 -r 3abf90b398fc pidgin/gtkblist.c --- a/pidgin/gtkblist.c Tue Jul 28 01:33:55 2009 +0000 +++ b/pidgin/gtkblist.c Tue Jul 28 01:50:42 2009 +0000 @@ -8436,14 +8436,66 @@ void pidgin_blist_update_plugin_actions(void) { - GtkWidget *menuitem, *submenu; PurplePlugin *plugin = NULL; GList *l; - GtkAccelGroup *accel_group; #if GTK_CHECK_VERSION(2,4,0) -/* TODO: Update Plugin */ + GtkAction *action; + GString *plugins_ui; + gchar *ui_string; + int count = 0; + + if ((gtkblist == NULL) || (gtkblist->ui == NULL)) + return; + + /* Clear the old menu */ + gtk_ui_manager_remove_ui(gtkblist->ui, plugins_merge_id); + gtk_ui_manager_remove_action_group(gtkblist->ui, plugins_action_group); + g_object_unref(G_OBJECT(plugins_action_group)); + + plugins_action_group = gtk_action_group_new("Accounts"); +#ifdef ENABLE_NLS + gtk_action_group_set_translation_domain(plugins_action_group, PACKAGE); +#endif + plugins_ui = g_string_new(NULL); + + /* Add a submenu for each plugin with custom actions */ + for (l = purple_plugins_get_loaded(); l; l = l->next) { + char *name; + + plugin = (PurplePlugin *)l->data; + + if (PURPLE_IS_PROTOCOL_PLUGIN(plugin)) + continue; + + if (!PURPLE_PLUGIN_HAS_ACTIONS(plugin)) + continue; + + name = g_strdup_printf("plugin%d", count); + action = gtk_action_new(name, plugin->info->name, NULL, NULL); + gtk_action_group_add_action(plugins_action_group, action); + g_string_append_printf(plugins_ui, "", name); + g_free(name); + + build_plugin_actions(plugins_action_group, plugins_ui, count, plugin, NULL); + + g_string_append(plugins_ui, ""); + count++; + } + + ui_string = g_strconcat("", + plugins_ui->str, + "", + NULL); + gtk_ui_manager_insert_action_group(gtkblist->ui, plugins_action_group, 1); + plugins_merge_id = gtk_ui_manager_add_ui_from_string(gtkblist->ui, ui_string, -1, NULL); +purple_debug_info("blist", "The plugins menu is {%s}\n", ui_string); + + g_string_free(plugins_ui, TRUE); + g_free(ui_string); #else + GtkWidget *menuitem, *submenu; + GtkAccelGroup *accel_group; GtkWidget *pluginmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools")); g_return_if_fail(pluginmenu != NULL);