--- a/pidgin/glade/pidgin3.xml.in Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/glade/pidgin3.xml.in Mon Apr 06 22:27:40 2020 -0500
@@ -2,6 +2,7 @@
<glade-catalog name="pidgin" version="@PURPLE_MAJOR_VERSION@.@PURPLE_MINOR_VERSION@" library="pidgin3">
<glade-widget-class name="PidginAccountChooser" generic-name="account_chooser" title="AccountChooser"/>
+ <glade-widget-class name="PidginAccountsMenu" generic-name="accounts_menu" title="AccountsMenu"/> <glade-widget-class name="PidginInviteDialog" generic-name="invite_dialog" title="InviteDialog"/>
<glade-widget-class name="PidginMenuTray" generic-name="menu_tray" title="MenuTray"/>
<glade-widget-class name="PidginPluginsMenu" generic-name="plugins_menu" title="PluginsMenu"/>
@@ -9,6 +10,7 @@
<glade-widget-group name="pidgin" title="Pidgin">
<glade-widget-class-ref name="PidginAccountChooser"/>
+ <glade-widget-class-ref name="PidginAccountsMenu"/> <glade-widget-class-ref name="PidginInviteDialog"/>
<glade-widget-class-ref name="PidginMenuTray"/>
<glade-widget-class-ref name="PidginPluginsMenu"/>
--- a/pidgin/gtkblist.c Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/gtkblist.c Mon Apr 06 22:27:40 2020 -0500
@@ -137,8 +137,6 @@
(gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(x))) & \
GDK_WINDOW_STATE_MAXIMIZED)
-static GtkWidget *accountmenu = NULL;
static guint visibility_manager_count = 0;
static GdkVisibilityState gtk_blist_visibility = GDK_VISIBILITY_UNOBSCURED;
static gboolean gtk_blist_focused = FALSE;
@@ -3517,13 +3515,7 @@
/***************************************************
***************************************************/
-/* TODO: fill out tooltips... */
static const GtkActionEntry blist_menu_entries[] = {
-/* NOTE: Do not set any accelerator to Control+O. It is mapped by
- gtk_blist_key_press_cb to "Get User Info" on the selected buddy. */
- { "AccountsMenu", NULL, N_("_Accounts"), NULL, NULL, NULL },
{ "ToolsMenu", NULL, N_("_Tools"), NULL, NULL, NULL },
{ "SetMood", NULL, N_("Set _Mood"), "<control>D", NULL, set_mood_show },
@@ -3532,8 +3524,6 @@
static const char *blist_menu =
- "<menu action='AccountsMenu'>"
"<menu action='ToolsMenu'>"
"<menuitem action='SetMood'/>"
@@ -4358,8 +4348,6 @@
g_return_if_fail(gtkblist != NULL);
- pidgin_blist_update_accounts_menu();
sensitive = (purple_connections_get_all() != NULL);
for (i = 0; i < require_connection_size; i++)
@@ -4735,12 +4723,6 @@
-account_actions_changed(PurpleAccount *account, gpointer data)
- pidgin_blist_update_accounts_menu();
account_status_changed(PurpleAccount *account, PurpleStatus *old,
PurpleStatus *new, PidginBuddyList *gtkblist)
@@ -5592,9 +5574,6 @@
gtk_box_pack_start(GTK_BOX(gtkblist->main_vbox), menu, FALSE, FALSE, 0);
- menu = gtk_ui_manager_get_widget(gtkblist->ui, "/BList/AccountsMenu");
- accountmenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu));
gtkblist->menu = pidgin_buddy_list_menu_new();
gtk_box_pack_start(GTK_BOX(gtkblist->main_vbox), gtkblist->menu, FALSE,
@@ -5813,8 +5792,6 @@
purple_signal_connect(handle, "account-error-changed", gtkblist,
PURPLE_CALLBACK(update_account_error_state),
- purple_signal_connect(handle, "account-actions-changed", gtkblist,
- PURPLE_CALLBACK(account_actions_changed), NULL);
handle = pidgin_accounts_get_handle();
purple_signal_connect(handle, "account-modified", gtkblist,
@@ -7254,7 +7231,6 @@
purple_signals_unregister_by_instance(pidgin_blist_get_handle());
purple_signals_disconnect_by_handle(pidgin_blist_get_handle());
@@ -7645,224 +7621,6 @@
-modify_account_cb(GtkWidget *widget, gpointer data)
- pidgin_account_dialog_show(PIDGIN_MODIFY_ACCOUNT_DIALOG, data);
-enable_account_cb(GtkCheckMenuItem *widget, gpointer data)
- PurpleAccount *account = data;
- const PurpleSavedStatus *saved_status;
- saved_status = purple_savedstatus_get_current();
- purple_savedstatus_activate_for_account(saved_status, account);
- purple_account_set_enabled(account, PIDGIN_UI, TRUE);
-disable_account_cb(GtkCheckMenuItem *widget, gpointer data)
- PurpleAccount *account = data;
- purple_account_set_enabled(account, PIDGIN_UI, FALSE);
-protocol_act(GtkWidget *obj, PurpleProtocolAction *pam)
- if (pam && pam->callback)
-pidgin_blist_update_accounts_menu(void)
- GtkWidget *menuitem, *submenu;
- GtkAccelGroup *accel_group;
- gboolean disabled_accounts = FALSE;
- gboolean enabled_accounts = FALSE;
- if (accountmenu == NULL)
- /* Clear the old Accounts menu */
- for (l = gtk_container_get_children(GTK_CONTAINER(accountmenu)); l; l = g_list_delete_link(l, l)) {
- if (menuitem != gtk_ui_manager_get_widget(gtkblist->ui, "/BList/AccountsMenu/ManageAccounts"))
- gtk_widget_destroy(menuitem);
- accel_group = gtk_menu_get_accel_group(GTK_MENU(accountmenu));
- for (accounts = purple_accounts_get_all(); accounts; accounts = accounts->next) {
- GtkWidget *image = NULL;
- PurpleAccount *account = NULL;
- GdkPixbuf *pixbuf = NULL;
- account = accounts->data;
- if (!purple_account_get_enabled(account, PIDGIN_UI)) {
- if (!disabled_accounts) {
- menuitem = gtk_menu_item_new_with_label(_("Enable Account"));
- gtk_menu_shell_append(GTK_MENU_SHELL(accountmenu), menuitem);
- submenu = gtk_menu_new();
- gtk_menu_set_accel_group(GTK_MENU(submenu), accel_group);
- gtk_menu_set_accel_path(GTK_MENU(submenu), "<Actions>/BListActions/EnableAccount");
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
- disabled_accounts = TRUE;
- buf = g_strconcat(purple_account_get_username(account), " (",
- purple_account_get_protocol_name(account), ")", NULL);
- menuitem = gtk_image_menu_item_new_with_label(buf);
- pixbuf = pidgin_create_protocol_icon(account, PIDGIN_PROTOCOL_ICON_SMALL);
- if (!purple_account_is_connected(account))
- gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf, 0.0, FALSE);
- image = gtk_image_new_from_pixbuf(pixbuf);
- g_object_unref(G_OBJECT(pixbuf));
- gtk_widget_show(image);
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(enable_account_cb), account);
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- enabled_accounts = TRUE;
- if (!enabled_accounts) {
- gtk_widget_show_all(accountmenu);
- pidgin_separator(accountmenu);
- for (accounts = purple_accounts_get_all(); accounts; accounts = accounts->next) {
- char *accel_path_buf = NULL;
- GtkWidget *image = NULL;
- PurpleConnection *gc = NULL;
- PurpleAccount *account = NULL;
- GdkPixbuf *pixbuf = NULL;
- PurpleProtocol *protocol;
- account = accounts->data;
- if (!purple_account_get_enabled(account, PIDGIN_UI))
- buf = g_strconcat(purple_account_get_username(account), " (",
- purple_account_get_protocol_name(account), ")", NULL);
- menuitem = gtk_image_menu_item_new_with_label(buf);
- accel_path_buf = g_strconcat("<Actions>/AccountActions/", buf, NULL);
- pixbuf = pidgin_create_protocol_icon(account, PIDGIN_PROTOCOL_ICON_SMALL);
- if (!purple_account_is_connected(account))
- gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf,
- image = gtk_image_new_from_pixbuf(pixbuf);
- g_object_unref(G_OBJECT(pixbuf));
- gtk_widget_show(image);
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
- gtk_menu_shell_append(GTK_MENU_SHELL(accountmenu), menuitem);
- submenu = gtk_menu_new();
- gtk_menu_set_accel_group(GTK_MENU(submenu), accel_group);
- gtk_menu_set_accel_path(GTK_MENU(submenu), accel_path_buf);
- g_free(accel_path_buf);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
- menuitem = gtk_menu_item_new_with_mnemonic(_("_Edit Account"));
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(modify_account_cb), account);
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- pidgin_separator(submenu);
- gc = purple_account_get_connection(account);
- protocol = gc && PURPLE_CONNECTION_IS_CONNECTED(gc) ?
- purple_connection_get_protocol(gc) : NULL;
- (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_moods) ||
- PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_actions))) {
- if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_moods) &&
- (purple_connection_get_flags(gc) & PURPLE_CONNECTION_FLAG_SUPPORT_MOODS)) {
- if (purple_account_get_status(account, "mood")) {
- menuitem = gtk_menu_item_new_with_mnemonic(_("Set _Mood..."));
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(set_mood_cb), account);
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CLIENT, get_actions)) {
- PurpleProtocolAction *action = NULL;
- actions = purple_protocol_client_iface_get_actions(protocol, gc);
- for (l = actions; l != NULL; l = l->next)
- action = (PurpleProtocolAction *) l->data;
- action->connection = gc;
- menuitem = gtk_menu_item_new_with_label(action->label);
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(protocol_act), action);
- g_object_set_data_full(G_OBJECT(menuitem), "protocol_action",
- (GDestroyNotify)purple_protocol_action_free);
- gtk_widget_show(menuitem);
- pidgin_separator(submenu);
- menuitem = gtk_menu_item_new_with_label(_("No actions available"));
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- gtk_widget_set_sensitive(menuitem, FALSE);
- pidgin_separator(submenu);
- menuitem = gtk_menu_item_new_with_mnemonic(_("_Disable"));
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(disable_account_cb), account);
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
- gtk_widget_show_all(accountmenu);
pidgin_blist_update_sort_methods(void)
--- a/pidgin/meson.build Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/meson.build Mon Apr 06 22:27:40 2020 -0500
@@ -34,7 +34,9 @@
+ 'pidginaccountactionsmenu.c', 'pidginaccountchooser.c',
+ 'pidginaccountsmenu.c', 'pidgincontactcompletion.c',
@@ -90,7 +92,9 @@
+ 'pidginaccountactionsmenu.c', 'pidginaccountchooser.h',
+ 'pidginaccountsmenu.c', 'pidgincontactcompletion.h',
--- a/pidgin/pidginactiongroup.c Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/pidginactiongroup.c Mon Apr 06 22:27:40 2020 -0500
@@ -26,7 +26,6 @@
-#include "pidgin/gtkaccount.h"
#include "pidgin/gtkblist.h"
#include "pidgin/gtkdialogs.h"
#include "pidgin/gtkpounce.h"
@@ -408,13 +407,6 @@
-pidgin_action_group_manage_accounts(GSimpleAction *simple, GVariant *parameter,
- pidgin_accounts_window_show();
pidgin_action_group_mute_sounds(GSimpleAction *action, GVariant *value,
@@ -570,9 +562,6 @@
.name = PIDGIN_ACTION_JOIN_CHAT,
.activate = pidgin_action_group_join_chat,
- .name = PIDGIN_ACTION_MANAGE_ACCOUNTS,
- .activate = pidgin_action_group_manage_accounts,
.name = PIDGIN_ACTION_MUTE_SOUNDS,
.change_state = pidgin_action_group_mute_sounds,
--- a/pidgin/pidginactiongroup.h Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/pidginactiongroup.h Mon Apr 06 22:27:40 2020 -0500
@@ -103,14 +103,6 @@
#define PIDGIN_ACTION_JOIN_CHAT ("join-chat")
- * PIDGIN_ACTION_MANAGE_ACCOUNTS:
- * A constatnt that represents the manage-accounts action to displays the
- * manage accounts window.
-#define PIDGIN_ACTION_MANAGE_ACCOUNTS ("manage-accounts")
* PIDGIN_ACTION_MUTE_SOUNDS:
* A constatnt that represents the mute-sounds action.
--- a/pidgin/pidginbuddylistmenu.c Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/pidginbuddylistmenu.c Mon Apr 06 22:27:40 2020 -0500
@@ -26,6 +26,10 @@
+ GtkWidget *accounts_menu; @@ -39,6 +43,8 @@
pidgin_buddy_list_menu_init(PidginBuddyListMenu *menu) {
gtk_widget_init_template(GTK_WIDGET(menu));
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu->accounts), gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu->plugins),
@@ -55,6 +61,10 @@
gtk_widget_class_bind_template_child(widget_class, PidginBuddyListMenu,
gtk_widget_class_bind_template_child(widget_class, PidginBuddyListMenu,
+ gtk_widget_class_bind_template_child(widget_class, PidginBuddyListMenu, + gtk_widget_class_bind_template_child(widget_class, PidginBuddyListMenu, gtk_widget_class_bind_template_child(widget_class, PidginBuddyListMenu,
--- a/pidgin/resources/BuddyList/menu.ui Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/resources/BuddyList/menu.ui Mon Apr 06 22:27:40 2020 -0500
@@ -184,27 +184,11 @@
- <object class="GtkMenuItem">
+ <object class="GtkMenuItem" id="accounts"> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Accounts</property>
<property name="use_underline">True</property>
- <object class="GtkMenu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <object class="GtkMenuItem" id="manage_accounts">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="action_name">blist.manage-accounts</property>
- <property name="label" translatable="yes">Manage Accounts</property>
- <property name="use_underline">True</property>
- <accelerator key="a" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@@ -369,6 +353,10 @@
+ <object class="PidginAccountsMenu" id="accounts_menu"> + <property name="visible">True</property> + <property name="can_focus">False</property> <object class="PidginPluginsMenu" id="plugins_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
--- a/pidgin/resources/pidgin.gresource.xml Wed Apr 01 13:08:57 2020 -0500
+++ b/pidgin/resources/pidgin.gresource.xml Mon Apr 06 22:27:40 2020 -0500
@@ -6,6 +6,8 @@
<file compressed="true">About/about.md</file>
<file compressed="true">About/credits.json</file>
<file compressed="true">Accounts/chooser.ui</file>
+ <file compressed="true">Accounts/actionsmenu.ui</file> + <file compressed="true">Accounts/menu.ui</file> <file compressed="true">BuddyList/menu.ui</file>
<file compressed="true">Conversations/invite_dialog.ui</file>
<file compressed="true">Debug/debug.ui</file>