pidgin/pidginaccountsenabledmenu.c

Sun, 03 Nov 2024 00:05:44 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 03 Nov 2024 00:05:44 -0500
changeset 43045
308e8d0ce68c
parent 42882
8885b147bc1c
child 43221
44fffd2f5564
permissions
-rw-r--r--

remove purple3-url-handler.desktop.in.in

The application that did the launching was removed long ago. Also this should
be implemented by the user interfaces and they might provide separate files to
groups schemas as well.

Testing Done:
Called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3640/

41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n.h>
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
25 #include <gtk/gtk.h>
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
26
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
27 #include <birb.h>
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
28
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "pidginaccountsenabledmenu.h"
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
31 #include "pidginapplication.h"
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
32
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
33 struct _PidginAccountsEnabledMenu {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
34 GMenuModel parent;
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
35
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
36 GQueue *accounts;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
37 };
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 /******************************************************************************
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
40 * Helpers
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
41 *****************************************************************************/
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
42 static void
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
43 pidgin_accounts_enabled_menu_foreach_add_action_groups(const char *prefix,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
44 GActionGroup *group,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
45 gpointer data)
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
46 {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
47 PidginApplication *application = data;
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
48
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
49 pidgin_application_add_action_group(application, prefix, group);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
50 }
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
51
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
52 static void
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
53 pidgin_accounts_enabled_menu_foreach_remove_action_groups(const char *prefix,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
54 G_GNUC_UNUSED GActionGroup *group,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
55 gpointer data)
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
56 {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
57 PidginApplication *application = data;
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
58
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
59 pidgin_application_add_action_group(application, prefix, NULL);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
60 }
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
61
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
62 static void
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
63 pidgin_accounts_enabled_menu_update(PidginAccountsEnabledMenu *menu,
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
64 PurpleAccount *account)
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
65 {
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
66 PurpleProtocol *protocol = NULL;
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
67 gint index = -1;
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
68
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
69 index = g_queue_index(menu->accounts, account);
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
70 if(index >= 0) {
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
71 /* Tell the model that the account needs to be updated. */
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
72 g_menu_model_items_changed(G_MENU_MODEL(menu), index, 0, 0);
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
73 }
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
74
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
75 /* If the protocol has actions add them to the application windows. */
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
76 protocol = purple_account_get_protocol(account);
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
77 if(PURPLE_IS_PROTOCOL(protocol)) {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
78 BirbActionMenu *action_menu = NULL;
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
79
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
80 action_menu = purple_protocol_get_action_menu(protocol, account);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
81 if(BIRB_IS_ACTION_MENU(action_menu)) {
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
82 GApplication *application = g_application_get_default();
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
83
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
84 birb_action_menu_foreach_action_group(action_menu,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
85 pidgin_accounts_enabled_menu_foreach_add_action_groups,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
86 application);
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
87 }
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
88 g_clear_object(&action_menu);
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
89 }
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
90 }
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
91
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
92 /******************************************************************************
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 * Callbacks
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 *****************************************************************************/
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 static void
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
96 pidgin_accounts_enabled_menu_changed_cb(G_GNUC_UNUSED PurpleAccountManager *manager,
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
97 PurpleAccount *account,
41946
0fb3b0e7122f Add a setting-changed signal to PurpleAccount and propagate it from PurpleAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 41891
diff changeset
98 G_GNUC_UNUSED GParamSpec *pspec,
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
99 gpointer data)
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
100 {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
101 PidginAccountsEnabledMenu *menu = data;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
102
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
103 if(purple_account_get_enabled(account)) {
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
104 /* Add the account to the start of the list. */
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
105 g_queue_push_head(menu->accounts, g_object_ref(account));
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
106
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
107 /* Tell everyone our model added a new item at position 0. */
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
108 g_menu_model_items_changed(G_MENU_MODEL(menu), 0, 0, 1);
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
109 } else {
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
110 gint index = g_queue_index(menu->accounts, account);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
111
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
112 if(index >= 0) {
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
113 g_queue_pop_nth(menu->accounts, index);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
114
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
115 /* Tell the model that we removed one item at the given index. */
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
116 g_menu_model_items_changed(G_MENU_MODEL(menu), index, 1, 0);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
117
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
118 /* Remove the reference to the account that we were holding. */
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
119 g_object_unref(account);
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
120 }
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
121 }
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 static void
42262
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
125 pidgin_accounts_enabled_menu_account_connected_cb(G_GNUC_UNUSED PurpleAccountManager *m,
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
126 PurpleAccount *account,
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
127 gpointer data)
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 {
42009
fb172b78a9ee Replace the account-actions-changed signal with an actions-changed signal on PurpleProtocolActions
Gary Kramlich <grim@reaperworld.com>
parents: 42004
diff changeset
129 pidgin_accounts_enabled_menu_update(data, account);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 static void
42262
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
133 pidgin_accounts_enabled_menu_account_disconnected_cb(G_GNUC_UNUSED PurpleAccountManager *manager,
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
134 PurpleAccount *account,
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
135 gpointer data)
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
136 {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
137 PidginAccountsEnabledMenu *menu = data;
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
138 PurpleProtocol *protocol = NULL;
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
139 gint index = -1;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
140
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
141 index = g_queue_index(menu->accounts, account);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
142 if(index >= 0) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
143 /* Tell the model that the account needs to be updated. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
144 g_menu_model_items_changed(G_MENU_MODEL(menu), index, 0, 0);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
145 }
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
146
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
147 /* Figure out if this is the last connected account for this protocol, and
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
148 * if so, remove the action group from the application windows.
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
149 */
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
150 protocol = purple_account_get_protocol(account);
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
151 if(PURPLE_IS_PROTOCOL(protocol)) {
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
152 PurpleAccountManager *manager = NULL;
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
153 GList *enabled_accounts = NULL;
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
154 gboolean found = FALSE;
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
155
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
156 manager = purple_account_manager_get_default();
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
157 enabled_accounts = purple_account_manager_get_enabled(manager);
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
158
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
159 while(enabled_accounts != NULL) {
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
160 PurpleAccount *account2 = PURPLE_ACCOUNT(enabled_accounts->data);
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
161 PurpleProtocol *protocol2 = purple_account_get_protocol(account2);
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
162
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
163 if(!found && protocol2 == protocol) {
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
164 found = TRUE;
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
165 }
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
166
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
167 enabled_accounts = g_list_delete_link(enabled_accounts,
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
168 enabled_accounts);
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
169 }
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
170
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
171 if(!found) {
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
172 GApplication *application = g_application_get_default();
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
173 BirbActionMenu *action_menu = NULL;
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
174
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
175 action_menu = purple_protocol_get_action_menu(protocol, account);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
176 birb_action_menu_foreach_action_group(action_menu,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
177 pidgin_accounts_enabled_menu_foreach_remove_action_groups,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
178 application);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
179 g_clear_object(&action_menu);
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
180 }
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
181 }
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
182 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
183
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
184 /******************************************************************************
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
185 * GMenuModel Implementation
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
186 *****************************************************************************/
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
187 static gboolean
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41946
diff changeset
188 pidgin_accounts_enabled_menu_is_mutable(G_GNUC_UNUSED GMenuModel *model) {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
189 return TRUE;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
190 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
191
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
192 static gint
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
193 pidgin_accounts_enabled_menu_get_n_items(GMenuModel *model) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
194 PidginAccountsEnabledMenu *menu = PIDGIN_ACCOUNTS_ENABLED_MENU(model);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
195
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
196 return g_queue_get_length(menu->accounts);
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
197 }
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
198
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
199 static void
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
200 pidgin_accounts_enabled_menu_get_item_attributes(GMenuModel *model, gint index,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
201 GHashTable **attributes)
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
202 {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
203 PidginAccountsEnabledMenu *menu = PIDGIN_ACCOUNTS_ENABLED_MENU(model);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
204 PurpleAccount *account = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
205 PurpleProtocol *protocol = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
206 GVariant *value = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
207 gchar *label = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
208 const gchar *account_name = NULL, *protocol_name = NULL, *icon_name = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
209
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
210 /* Create our hash table of attributes to return. This must always be
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
211 * populated.
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
212 */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
213 *attributes = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
214 (GDestroyNotify)g_variant_unref);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
215
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
216 /* Get the account the caller is interested in. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
217 account = g_queue_peek_nth(menu->accounts, index);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
218 if(!PURPLE_IS_ACCOUNT(account)) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
219 return;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
220 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
221
42804
be8c8b5471ca Update pidgin to use get id and username directly on PurpleAccount
Gary Kramlich <grim@reaperworld.com>
parents: 42575
diff changeset
222 account_name = purple_account_get_username(account);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
223
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
224 /* Get the protocol from the account. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
225 protocol = purple_account_get_protocol(account);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
226 if(PURPLE_IS_PROTOCOL(protocol)) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
227 protocol_name = purple_protocol_get_name(protocol);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
228 icon_name = purple_protocol_get_icon_name(protocol);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
229 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
230
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
231 /* Add the label. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
232
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
233 /* translators: This format string is intended to contain the account
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
234 * name followed by the protocol name to uniquely identify a specific
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
235 * account.
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
236 */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
237 label = g_strdup_printf(_("%s (%s)"), account_name, protocol_name);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
238 value = g_variant_new_string(label);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
239 g_free(label);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
240 g_hash_table_insert(*attributes, G_MENU_ATTRIBUTE_LABEL,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
241 g_variant_ref_sink(value));
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
242
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
243 /* Add the icon if we have one. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
244 if(icon_name != NULL) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
245 value = g_variant_new_string(icon_name);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
246 g_hash_table_insert(*attributes, G_MENU_ATTRIBUTE_ICON,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
247 g_variant_ref_sink(value));
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
248 }
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
249 }
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
250
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
251 static void
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
252 pidgin_accounts_enabled_menu_get_item_links(GMenuModel *model, gint index,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
253 GHashTable **links)
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
255 PidginAccountsEnabledMenu *menu = PIDGIN_ACCOUNTS_ENABLED_MENU(model);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
256 PurpleAccount *account = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
257 PurpleConnection *connection = NULL;
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
258 PurpleProtocol *protocol = NULL;
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
259 GApplication *application = g_application_get_default();
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
260 GMenu *submenu = NULL, *template = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
261 const gchar *account_id = NULL, *connection_id = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
262
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
263 /* Create our hash table for links, this must always be populated. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
264 *links = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
265 g_object_unref);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
266
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
267 account = g_queue_peek_nth(menu->accounts, index);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
268 if(!PURPLE_IS_ACCOUNT(account)) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
269 return;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
270 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
271
42804
be8c8b5471ca Update pidgin to use get id and username directly on PurpleAccount
Gary Kramlich <grim@reaperworld.com>
parents: 42575
diff changeset
272 account_id = purple_account_get_id(account);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
273
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
274 connection = purple_account_get_connection(account);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
275 if(PURPLE_IS_CONNECTION(connection)) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
276 connection_id = purple_connection_get_id(connection);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
277 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
278
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
279 /* Create a copy of our template menu. */
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
280 template = gtk_application_get_menu_by_id(GTK_APPLICATION(application),
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
281 "enabled-account");
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
282 submenu = purple_menu_copy(G_MENU_MODEL(template));
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
283
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
284 /* Add the account actions if we have any. */
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
285 protocol = purple_account_get_protocol(account);
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
286 if(PURPLE_IS_PROTOCOL(protocol)) {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
287 BirbActionMenu *action_menu = NULL;
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
288
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
289 action_menu = purple_protocol_get_action_menu(protocol, account);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
290
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
291 if(BIRB_IS_ACTION_MENU(action_menu)) {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
292 GMenu *protocol_menu = NULL;
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
293
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
294 protocol_menu = birb_action_menu_get_menu(action_menu);
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
295 if(G_IS_MENU(protocol_menu)) {
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
296 g_menu_insert_section(submenu, 1, NULL,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
297 G_MENU_MODEL(protocol_menu));
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
298 }
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
299
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
300 g_clear_object(&action_menu);
41458
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
301 }
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
302 }
90276efac79d Add protocol actions to Pidgin account menu
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
303
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
304 purple_menu_populate_dynamic_targets(submenu,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
305 "account", account_id,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
306 "connection", connection_id,
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
307 NULL);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
308
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
309 g_hash_table_insert(*links, G_MENU_LINK_SUBMENU, submenu);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 /******************************************************************************
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
313 * GObject Implementation
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314 *****************************************************************************/
42880
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
315 G_DEFINE_FINAL_TYPE(PidginAccountsEnabledMenu, pidgin_accounts_enabled_menu,
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
316 G_TYPE_MENU_MODEL)
6df94d23bdea Update Pidgin.AccountsEnabledMenu to use Purple.Protocol.get_action_menu
Gary Kramlich <grim@reaperworld.com>
parents: 42804
diff changeset
317
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
318 static void
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
319 pidgin_accounts_enabled_menu_dispose(GObject *obj) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
320 PidginAccountsEnabledMenu *menu = PIDGIN_ACCOUNTS_ENABLED_MENU(obj);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
321
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
322 if(menu->accounts != NULL) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
323 g_queue_free_full(menu->accounts, g_object_unref);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
324 menu->accounts = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
325 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
326
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
327 G_OBJECT_CLASS(pidgin_accounts_enabled_menu_parent_class)->dispose(obj);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
328
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
329 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
330
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
331 static void
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
332 pidgin_accounts_enabled_menu_constructed(GObject *obj) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
333 PidginAccountsEnabledMenu *menu = PIDGIN_ACCOUNTS_ENABLED_MENU(obj);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
334 PurpleAccountManager *manager = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
335 GList *enabled = NULL, *l = NULL;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
336 gint count = 0;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
337
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
338 G_OBJECT_CLASS(pidgin_accounts_enabled_menu_parent_class)->constructed(obj);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
339
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
340 manager = purple_account_manager_get_default();
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
341 enabled = purple_account_manager_get_enabled(manager);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
342
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
343 for(l = enabled; l != NULL; l = l->next) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
344 g_queue_push_head(menu->accounts, g_object_ref(l->data));
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
345 count++;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
346 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
347 g_list_free(enabled);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
348
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
349 g_menu_model_items_changed(G_MENU_MODEL(obj), 0, 0, count);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
350 }
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
351
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
352 static void
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
353 pidgin_accounts_enabled_menu_init(PidginAccountsEnabledMenu *menu) {
42262
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
354 PurpleAccountManager *account_manager = NULL;
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
356 menu->accounts = g_queue_new();
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357
42262
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
358 account_manager = purple_account_manager_get_default();
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
359 g_signal_connect_object(account_manager, "account-changed::enabled",
41891
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
360 G_CALLBACK(pidgin_accounts_enabled_menu_changed_cb),
a45d6db4f857 Propagate the PurpleAccount::notify signal via PurpleAccountManager::account-changed
Gary Kramlich <grim@reaperworld.com>
parents: 41460
diff changeset
361 menu, 0);
42262
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
362 g_signal_connect_object(account_manager, "account-connected",
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
363 G_CALLBACK(pidgin_accounts_enabled_menu_account_connected_cb),
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
364 menu, 0);
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
365 g_signal_connect_object(account_manager, "account-disconnected",
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
366 G_CALLBACK(pidgin_accounts_enabled_menu_account_disconnected_cb),
5f218efc3c7b Port PidginAccountsEnabledMenu to the AccountManager propagated signals
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
367 menu, 0);
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
368 }
41403
0186ae21071f Add purple_menu_populate_dynamic_targets to dynamically update GMenu's
Gary Kramlich <grim@reaperworld.com>
parents: 41392
diff changeset
369
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
370 static void
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
371 pidgin_accounts_enabled_menu_class_init(PidginAccountsEnabledMenuClass *klass) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
372 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
373 GMenuModelClass *model_class = G_MENU_MODEL_CLASS(klass);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
374
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
375 obj_class->constructed = pidgin_accounts_enabled_menu_constructed;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
376 obj_class->dispose = pidgin_accounts_enabled_menu_dispose;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
377
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
378 model_class->is_mutable = pidgin_accounts_enabled_menu_is_mutable;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
379 model_class->get_n_items = pidgin_accounts_enabled_menu_get_n_items;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
380 model_class->get_item_attributes = pidgin_accounts_enabled_menu_get_item_attributes;
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
381 model_class->get_item_links = pidgin_accounts_enabled_menu_get_item_links;
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 }
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
383
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
384 /******************************************************************************
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
385 * Public API
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
386 *****************************************************************************/
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
387 GMenuModel *
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
388 pidgin_accounts_enabled_menu_new(void) {
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
389 return g_object_new(PIDGIN_TYPE_ACCOUNTS_ENABLED_MENU, NULL);
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41403
diff changeset
390 }

mercurial