Thu, 27 Jun 2024 00:46:27 -0500
Update pidgin to use get id and username directly on PurpleAccount
This is part of making PurpleAccount have a PurpleContactInfo instead of being
one.
Testing Done:
Ran the turtles, connected some accounts, disabled one via the menu and re-enabled it.
Reviewed at https://reviews.imfreedom.org/r/3273/
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
1 | /* |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
2 | * Pidgin - Internet Messenger |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
3 | * Copyright (C) Pidgin Developers <devel@pidgin.im> |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
4 | * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
5 | * Pidgin is the legal property of its developers, whose names are too numerous |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
6 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
7 | * source distribution. |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
8 | * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
9 | * This program is free software; you can redistribute it and/or modify |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
10 | * it under the terms of the GNU General Public License as published by |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
11 | * the Free Software Foundation; either version 2 of the License, or |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
12 | * (at your option) any later version. |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
13 | * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
14 | * This program is distributed in the hope that it will be useful, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
17 | * GNU General Public License for more details. |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
18 | * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
19 | * You should have received a copy of the GNU General Public License |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
20 | * along with this program; if not, see <https://www.gnu.org/licenses/>. |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
21 | */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
22 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
23 | #include <glib/gi18n-lib.h> |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
24 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
25 | #include "pidgincontactinfomenu.h" |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
26 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
27 | /****************************************************************************** |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
28 | * Helpers |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
29 | *****************************************************************************/ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
30 | static gboolean |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
31 | pidgin_contact_info_menu_parse_parameter(GVariant *parameter, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
32 | PurpleAccount **account, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
33 | PurpleContact **contact) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
34 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
35 | PurpleAccount *local_account = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
36 | PurpleAccountManager *account_manager = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
37 | PurpleContact *local_contact = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
38 | PurpleContactManager *contact_manager = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
39 | char *account_id = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
40 | char *contact_id = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
41 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
42 | g_variant_get(parameter, "(ss)", &account_id, &contact_id); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
43 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
44 | /* Find the account. */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
45 | account_manager = purple_account_manager_get_default(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
46 | local_account = purple_account_manager_find_by_id(account_manager, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
47 | account_id); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
48 | if(!PURPLE_IS_ACCOUNT(local_account)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
49 | g_clear_pointer(&account_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
50 | g_clear_pointer(&contact_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
51 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
52 | return FALSE; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
53 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
54 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
55 | if(account != NULL) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
56 | *account = local_account; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
57 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
58 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
59 | /* Find the contact. */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
60 | contact_manager = purple_contact_manager_get_default(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
61 | local_contact = purple_contact_manager_find_with_id(contact_manager, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
62 | local_account, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
63 | contact_id); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
64 | if(!PURPLE_IS_CONTACT(local_contact)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
65 | g_clear_pointer(&account_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
66 | g_clear_pointer(&contact_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
67 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
68 | return FALSE; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
69 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
70 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
71 | if(contact != NULL) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
72 | *contact = local_contact; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
73 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
74 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
75 | g_clear_pointer(&account_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
76 | g_clear_pointer(&contact_id, g_free); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
77 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
78 | return TRUE; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
79 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
80 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
81 | static GMenuModel * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
82 | pidgin_contact_info_menu_get_starting_items(PurpleContactInfo *info, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
83 | PurpleAccount *account) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
84 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
85 | GMenu *menu = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
86 | GMenuItem *item = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
87 | const char *account_id = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
88 | const char *contact_id = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
89 | |
|
42804
be8c8b5471ca
Update pidgin to use get id and username directly on PurpleAccount
Gary Kramlich <grim@reaperworld.com>
parents:
42713
diff
changeset
|
90 | account_id = purple_account_get_id(account); |
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
91 | contact_id = purple_contact_info_get_id(info); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
92 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
93 | menu = g_menu_new(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
94 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
95 | item = g_menu_item_new(_("View Profile"), NULL); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
96 | g_menu_item_set_action_and_target(item, "contact.profile", "(ss)", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
97 | account_id, contact_id); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
98 | g_menu_append_item(menu, item); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
99 | g_clear_object(&item); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
100 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
101 | item = g_menu_item_new(_("Message"), NULL); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
102 | g_menu_item_set_action_and_target(item, "contact.message", "(ss)", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
103 | account_id, contact_id); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
104 | g_menu_append_item(menu, item); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
105 | g_clear_object(&item); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
106 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
107 | g_menu_append(menu, _("Send File..."), "contact.send-file"); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
108 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
109 | return G_MENU_MODEL(menu); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
110 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
111 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
112 | static void |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
113 | pidgin_contact_info_menu_disable_items(GActionMap *map, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
114 | PurpleAccount *account) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
115 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
116 | PurpleProtocol *protocol = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
117 | GAction *action = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
118 | gboolean enabled = TRUE; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
119 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
120 | protocol = purple_account_get_protocol(account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
121 | if(!PURPLE_IS_PROTOCOL_CONTACTS(protocol)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
122 | enabled = FALSE; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
123 | } else { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
124 | enabled = PURPLE_PROTOCOL_IMPLEMENTS(protocol, CONTACTS, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
125 | get_profile_async); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
126 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
127 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
128 | action = g_action_map_lookup_action(map, "profile"); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
129 | g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
130 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
131 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
132 | /****************************************************************************** |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
133 | * Contact Actions |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
134 | *****************************************************************************/ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
135 | static void |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
136 | pidgin_contact_info_menu_get_info_activate_cb(GObject *contacts, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
137 | GAsyncResult *result, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
138 | gpointer data) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
139 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
140 | PurpleContact *contact = data; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
141 | GError *error = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
142 | char *profile = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
143 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
144 | profile = purple_protocol_contacts_get_profile_finish(PURPLE_PROTOCOL_CONTACTS(contacts), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
145 | result, &error); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
146 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
147 | if(error != NULL) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
148 | g_warning("failed to get profile for '%s': %s", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
149 | purple_contact_info_get_id(PURPLE_CONTACT_INFO(contact)), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
150 | error->message); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
151 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
152 | g_clear_error(&error); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
153 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
154 | return; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
155 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
156 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
157 | g_message("profile data for '%s': %s", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
158 | purple_contact_info_get_id(PURPLE_CONTACT_INFO(contact)), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
159 | profile); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
160 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
161 | g_clear_object(&contact); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
162 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
163 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
164 | static void |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
165 | pidgin_contact_info_menu_get_info_activate(G_GNUC_UNUSED GSimpleAction *action, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
166 | GVariant *parameter, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
167 | G_GNUC_UNUSED gpointer data) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
168 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
169 | PurpleAccount *account = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
170 | PurpleContact *contact = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
171 | PurpleProtocol *protocol = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
172 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
173 | g_return_if_fail(g_variant_is_of_type(parameter, (GVariantType*)"(ss)")); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
174 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
175 | if(!pidgin_contact_info_menu_parse_parameter(parameter, &account, &contact)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
176 | g_clear_object(&account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
177 | g_clear_object(&contact); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
178 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
179 | g_warning("failed to parse parameter"); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
180 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
181 | return; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
182 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
183 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
184 | protocol = purple_account_get_protocol(account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
185 | if(PURPLE_IS_PROTOCOL_CONTACTS(protocol)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
186 | if(PURPLE_PROTOCOL_IMPLEMENTS(protocol, CONTACTS, get_profile_async)) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
187 | purple_protocol_contacts_get_profile_async(PURPLE_PROTOCOL_CONTACTS(protocol), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
188 | PURPLE_CONTACT_INFO(contact), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
189 | NULL, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
190 | pidgin_contact_info_menu_get_info_activate_cb, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
191 | g_object_ref(contact)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
192 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
193 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
194 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
195 | g_clear_object(&account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
196 | g_clear_object(&contact); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
197 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
198 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
199 | static void |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
200 | pidgin_contact_info_menu_message_activate(G_GNUC_UNUSED GSimpleAction *action, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
201 | GVariant *parameter, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
202 | G_GNUC_UNUSED gpointer data) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
203 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
204 | PurpleContact *contact = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
205 | PurpleConversation *conversation = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
206 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
207 | g_return_if_fail(g_variant_is_of_type(parameter, (GVariantType*)"(ss)")); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
208 | |
|
42713
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
209 | if(!pidgin_contact_info_menu_parse_parameter(parameter, NULL, &contact)) { |
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
210 | g_clear_object(&contact); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
211 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
212 | g_warning("failed to parse parameter"); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
213 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
214 | return; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
215 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
216 | |
|
42713
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
217 | if(!PURPLE_IS_CONTACT(contact)) { |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
218 | g_warning("failed to find contact"); |
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
219 | |
|
42713
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
220 | return; |
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
221 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
222 | |
|
42713
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
223 | conversation = purple_contact_find_dm(contact); |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
224 | if(PURPLE_IS_CONVERSATION(conversation)) { |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
225 | purple_conversation_present(conversation); |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
226 | } else { |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
227 | purple_contact_create_dm_async(contact, NULL, NULL, NULL); |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
228 | } |
|
a89c5a6dc80b
Port PidginContactInfoMenu away from purple_conversation_manager_find_im
Gary Kramlich <grim@reaperworld.com>
parents:
42304
diff
changeset
|
229 | |
|
42304
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
230 | g_clear_object(&contact); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
231 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
232 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
233 | static GActionGroup * |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
234 | pidgin_contact_info_menu_get_contact_actions(void) { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
235 | GSimpleActionGroup *action_group = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
236 | GActionEntry entries[] = { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
237 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
238 | .name = "profile", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
239 | .activate = pidgin_contact_info_menu_get_info_activate, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
240 | .parameter_type = "(ss)", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
241 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
242 | }, { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
243 | .name = "message", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
244 | .activate = pidgin_contact_info_menu_message_activate, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
245 | .parameter_type = "(ss)", |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
246 | }, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
247 | }; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
248 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
249 | action_group = g_simple_action_group_new(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
250 | g_action_map_add_action_entries(G_ACTION_MAP(action_group), entries, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
251 | G_N_ELEMENTS(entries), NULL); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
252 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
253 | return G_ACTION_GROUP(action_group); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
254 | } |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
255 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
256 | /****************************************************************************** |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
257 | * Public API |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
258 | *****************************************************************************/ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
259 | void |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
260 | pidgin_contact_info_menu_popup(PurpleContactInfo *info, PurpleAccount *account, |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
261 | GtkWidget *parent, gdouble x, gdouble y) |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
262 | { |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
263 | GtkWidget *popover = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
264 | GActionGroup *action_group = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
265 | GMenu *menu = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
266 | GMenuModel *section = NULL; |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
267 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
268 | g_return_if_fail(PURPLE_IS_CONTACT_INFO(info)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
269 | g_return_if_fail(PURPLE_IS_ACCOUNT(account)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
270 | g_return_if_fail(GTK_IS_WIDGET(parent)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
271 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
272 | /* Add actions to the parent. */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
273 | action_group = pidgin_contact_info_menu_get_contact_actions(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
274 | gtk_widget_insert_action_group(parent, "contact", action_group); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
275 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
276 | /* Disable any actions that aren't currently supported. */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
277 | pidgin_contact_info_menu_disable_items(G_ACTION_MAP(action_group), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
278 | account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
279 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
280 | /* Create the menu. */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
281 | menu = g_menu_new(); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
282 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
283 | section = pidgin_contact_info_menu_get_starting_items(info, account); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
284 | g_menu_append_section(menu, NULL, section); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
285 | g_clear_object(§ion); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
286 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
287 | /* Create the popover and pop it up! */ |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
288 | popover = gtk_popover_menu_new_from_model(G_MENU_MODEL(menu)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
289 | gtk_widget_set_parent(popover, parent); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
290 | gtk_popover_set_pointing_to(GTK_POPOVER(popover), |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
291 | &(const GdkRectangle){x, y, 1, 1}); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
292 | gtk_popover_popup(GTK_POPOVER(popover)); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
293 | |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
294 | g_clear_object(&menu); |
|
51a419226147
A basic context menu for PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
295 | } |