Sun, 09 Nov 2008 20:55:10 +0000
Added menu items to buddy list context menu to start voice and video sessions
After discussing the matter with Maiku, we decided to have two choises.
"Audio call" which will show up if audio sessions is possible with a buddy and
the other item is either "Audio/Video" or "Video" depending on if the buddy
supports both at the same time or not
| 14743 | 1 | /* |
| 15884 | 2 | * System tray icon (aka docklet) plugin for Purple |
| 14743 | 3 | * |
| 4 | * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org> | |
| 5 | * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com> | |
| 6 | * Inspired by a similar plugin by: | |
| 7 | * John (J5) Palmieri <johnp@martianrock.com> | |
| 8 | * | |
| 9 | * This program is free software; you can redistribute it and/or | |
| 10 | * modify it under the terms of the GNU General Public License as | |
| 11 | * published by the Free Software Foundation; either version 2 of the | |
| 12 | * License, or (at your option) any later version. | |
| 13 | * | |
| 14 | * This program is distributed in the hope that it will be useful, but | |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 17 | * General Public License for more details. | |
| 18 | * | |
| 19 | * You should have received a copy of the GNU General Public License | |
| 20 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19215
diff
changeset
|
21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19215
diff
changeset
|
22 | * 02111-1301, USA. |
| 14743 | 23 | */ |
| 24 | #include "internal.h" | |
| 15577 | 25 | #include "pidgin.h" |
| 14743 | 26 | |
| 27 | #include "core.h" | |
| 28 | #include "conversation.h" | |
| 29 | #include "debug.h" | |
| 30 | #include "prefs.h" | |
| 31 | #include "signals.h" | |
| 32 | #include "sound.h" | |
| 33 | ||
| 34 | #include "gtkaccount.h" | |
| 35 | #include "gtkblist.h" | |
| 36 | #include "gtkconv.h" | |
| 37 | #include "gtkplugin.h" | |
| 38 | #include "gtkprefs.h" | |
| 39 | #include "gtksavedstatuses.h" | |
| 40 | #include "gtksound.h" | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
41 | #include "gtkstatusbox.h" |
| 14743 | 42 | #include "gtkutils.h" |
|
15883
969b74a3e27a
According to etags, pidgin/ should be completely clean of references to 'gaim' as a client
Sean Egan <seanegan@pidgin.im>
parents:
15882
diff
changeset
|
43 | #include "pidginstock.h" |
| 14743 | 44 | #include "gtkdocklet.h" |
| 45 | #include "gtkdialogs.h" | |
| 46 | ||
| 47 | #ifndef DOCKLET_TOOLTIP_LINE_LIMIT | |
| 48 | #define DOCKLET_TOOLTIP_LINE_LIMIT 5 | |
| 49 | #endif | |
| 50 | ||
| 51 | /* globals */ | |
| 52 | static struct docklet_ui_ops *ui_ops = NULL; | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
53 | static PurpleStatusPrimitive status = PURPLE_STATUS_OFFLINE; |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
54 | static gboolean pending = FALSE; |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
55 | static gboolean connecting = FALSE; |
| 14743 | 56 | static gboolean enable_join_chat = FALSE; |
| 57 | static guint docklet_blinking_timer = 0; | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
58 | static gboolean visible = FALSE; |
| 14743 | 59 | static gboolean visibility_manager = FALSE; |
| 60 | ||
| 61 | /************************************************************************** | |
| 62 | * docklet status and utility functions | |
| 63 | **************************************************************************/ | |
| 64 | static gboolean | |
|
22108
cb9819851163
Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
65 | docklet_blink_icon(gpointer data) |
| 14743 | 66 | { |
| 67 | static gboolean blinked = FALSE; | |
| 68 | gboolean ret = FALSE; /* by default, don't keep blinking */ | |
| 69 | ||
| 70 | blinked = !blinked; | |
| 71 | ||
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
72 | if(pending && !connecting) { |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
73 | if (blinked) { |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
74 | if (ui_ops && ui_ops->blank_icon) |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
75 | ui_ops->blank_icon(); |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
76 | } else { |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
77 | pidgin_docklet_update_icon(); |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
78 | } |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
79 | ret = TRUE; /* keep blinking */ |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
80 | } else { |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
81 | docklet_blinking_timer = 0; |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
82 | blinked = FALSE; |
| 14743 | 83 | } |
| 84 | ||
| 85 | return ret; | |
| 86 | } | |
| 87 | ||
| 88 | static GList * | |
| 89 | get_pending_list(guint max) | |
| 90 | { | |
| 91 | GList *l_im = NULL; | |
| 92 | GList *l_chat = NULL; | |
| 93 | ||
| 15884 | 94 | l_im = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_IM, |
|
15566
ce486027d329
GAIM_UNSEEN to PIDGIN_UNSEEN
Sean Egan <seanegan@pidgin.im>
parents:
15563
diff
changeset
|
95 | PIDGIN_UNSEEN_TEXT, |
|
14813
c24dda7fb69e
[gaim-migrate @ 17508]
Casey Harkins <charkins@pidgin.im>
parents:
14745
diff
changeset
|
96 | FALSE, max); |
| 14743 | 97 | |
| 15884 | 98 | l_chat = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_CHAT, |
|
15566
ce486027d329
GAIM_UNSEEN to PIDGIN_UNSEEN
Sean Egan <seanegan@pidgin.im>
parents:
15563
diff
changeset
|
99 | PIDGIN_UNSEEN_NICK, |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
100 | FALSE, max); |
| 14743 | 101 | |
| 102 | if (l_im != NULL && l_chat != NULL) | |
| 103 | return g_list_concat(l_im, l_chat); | |
| 104 | else if (l_im != NULL) | |
| 105 | return l_im; | |
| 106 | else | |
| 107 | return l_chat; | |
| 108 | } | |
| 109 | ||
| 110 | static gboolean | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21453
diff
changeset
|
111 | docklet_update_status(void) |
| 14743 | 112 | { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
113 | GList *convs, *l; |
| 14743 | 114 | int count; |
| 15884 | 115 | PurpleSavedStatus *saved_status; |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
116 | PurpleStatusPrimitive newstatus = PURPLE_STATUS_OFFLINE; |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
117 | gboolean newpending = FALSE, newconnecting = FALSE; |
| 14743 | 118 | |
|
16681
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
119 | /* get the current savedstatus */ |
|
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
120 | saved_status = purple_savedstatus_get_current(); |
|
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
121 | |
| 14743 | 122 | /* determine if any ims have unseen messages */ |
| 123 | convs = get_pending_list(DOCKLET_TOOLTIP_LINE_LIMIT); | |
| 124 | ||
|
19215
7a4ee0715da8
reverting the show docklet preference the correct way
Ka-Hing Cheung <khc@pidgin.im>
parents:
19129
diff
changeset
|
125 | if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/docklet/show"), "pending")) { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
126 | if (convs && ui_ops->create && !visible) { |
|
15075
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
127 | g_list_free(convs); |
|
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
128 | ui_ops->create(); |
|
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
129 | return FALSE; |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
130 | } else if (!convs && ui_ops->destroy && visible) { |
|
15075
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
131 | ui_ops->destroy(); |
|
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
132 | return FALSE; |
| 14935 | 133 | } |
| 134 | } | |
| 135 | ||
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
136 | if (!visible) { |
|
15075
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
137 | g_list_free(convs); |
| 14947 | 138 | return FALSE; |
|
15075
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
139 | } |
| 14947 | 140 | |
| 14743 | 141 | if (convs != NULL) { |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
142 | newpending = TRUE; |
| 14743 | 143 | |
| 144 | /* set tooltip if messages are pending */ | |
| 145 | if (ui_ops->set_tooltip) { | |
| 146 | GString *tooltip_text = g_string_new(""); | |
| 147 | for (l = convs, count = 0 ; l != NULL ; l = l->next, count++) { | |
|
21022
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
148 | PurpleConversation *conv = (PurpleConversation *)l->data; |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
149 | PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
150 | |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
151 | if (count == DOCKLET_TOOLTIP_LINE_LIMIT - 1) { |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
152 | g_string_append(tooltip_text, _("Right-click for more unread messages...\n")); |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
153 | } else if(gtkconv) { |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
154 | g_string_append_printf(tooltip_text, |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
155 | ngettext("%d unread message from %s\n", "%d unread messages from %s\n", gtkconv->unseen_count), |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
156 | gtkconv->unseen_count, |
|
21056
356b2a5f4d21
Use the conversation title for unread message tooltips. Fixes #3557.
Casey Harkins <charkins@pidgin.im>
parents:
21022
diff
changeset
|
157 | purple_conversation_get_title(conv)); |
|
21022
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
158 | } else { |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
159 | g_string_append_printf(tooltip_text, |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
160 | ngettext("%d unread message from %s\n", "%d unread messages from %s\n", |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
161 | GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count"))), |
|
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
162 | GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count")), |
|
21056
356b2a5f4d21
Use the conversation title for unread message tooltips. Fixes #3557.
Casey Harkins <charkins@pidgin.im>
parents:
21022
diff
changeset
|
163 | purple_conversation_get_title(conv)); |
| 14743 | 164 | } |
| 165 | } | |
| 166 | ||
| 167 | /* get rid of the last newline */ | |
| 168 | if (tooltip_text->len > 0) | |
| 169 | tooltip_text = g_string_truncate(tooltip_text, tooltip_text->len - 1); | |
| 170 | ||
| 171 | ui_ops->set_tooltip(tooltip_text->str); | |
| 172 | ||
| 173 | g_string_free(tooltip_text, TRUE); | |
| 174 | } | |
| 175 | ||
| 176 | g_list_free(convs); | |
| 177 | ||
| 178 | } else if (ui_ops->set_tooltip) { | |
|
16977
c9cb49bea66d
Change the PIDGIN_NAME stuff to allow translators to transliterate the
Richard Laager <rlaager@pidgin.im>
parents:
16960
diff
changeset
|
179 | char *tooltip_text = g_strconcat(PIDGIN_NAME, " - ", |
|
16681
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
180 | purple_savedstatus_get_title(saved_status), NULL); |
|
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
181 | ui_ops->set_tooltip(tooltip_text); |
|
c15974a4ff5d
Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents:
16263
diff
changeset
|
182 | g_free(tooltip_text); |
| 14743 | 183 | } |
| 184 | ||
| 15884 | 185 | for(l = purple_accounts_get_all(); l != NULL; l = l->next) { |
| 14743 | 186 | |
| 15884 | 187 | PurpleAccount *account = (PurpleAccount*)l->data; |
| 188 | PurpleStatus *account_status; | |
| 14743 | 189 | |
| 15884 | 190 | if (!purple_account_get_enabled(account, PIDGIN_UI)) |
| 14743 | 191 | continue; |
| 192 | ||
| 15884 | 193 | if (purple_account_is_disconnected(account)) |
| 14743 | 194 | continue; |
| 195 | ||
| 15884 | 196 | account_status = purple_account_get_active_status(account); |
| 197 | if (purple_account_is_connecting(account)) | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
198 | newconnecting = TRUE; |
| 14743 | 199 | } |
|
15765
f281403e98cf
Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents:
15760
diff
changeset
|
200 | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
201 | newstatus = purple_savedstatus_get_type(saved_status); |
|
15765
f281403e98cf
Fix win32 docklet. This is pretty ugly - we'll force GTK+ 2.10 at some point and use GtkStatusIcon to avoid converting the stock images to HICONs directly.
Daniel Atallah <datallah@pidgin.im>
parents:
15760
diff
changeset
|
202 | |
| 14743 | 203 | /* update the icon if we changed status */ |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
204 | if (status != newstatus || pending!=newpending || connecting!=newconnecting) { |
| 14743 | 205 | status = newstatus; |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
206 | pending = newpending; |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
207 | connecting = newconnecting; |
| 14743 | 208 | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
209 | pidgin_docklet_update_icon(); |
| 14743 | 210 | |
| 211 | /* and schedule the blinker function if messages are pending */ | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
212 | if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink") |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
213 | && pending && !connecting && docklet_blinking_timer == 0) { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
214 | docklet_blinking_timer = g_timeout_add(500, docklet_blink_icon, NULL); |
| 14743 | 215 | } |
| 216 | } | |
| 217 | ||
| 218 | return FALSE; /* for when we're called by the glib idle handler */ | |
| 219 | } | |
| 220 | ||
| 221 | static gboolean | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21453
diff
changeset
|
222 | online_account_supports_chat(void) |
| 14743 | 223 | { |
| 224 | GList *c = NULL; | |
| 15884 | 225 | c = purple_connections_get_all(); |
| 14743 | 226 | |
| 227 | while(c != NULL) { | |
| 15884 | 228 | PurpleConnection *gc = c->data; |
| 229 | PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 14743 | 230 | if (prpl_info != NULL && prpl_info->chat_info != NULL) |
| 231 | return TRUE; | |
| 232 | c = c->next; | |
| 233 | } | |
| 234 | ||
| 235 | return FALSE; | |
| 236 | } | |
| 237 | ||
| 238 | /************************************************************************** | |
| 239 | * callbacks and signal handlers | |
| 240 | **************************************************************************/ | |
|
14745
d43256e1e6fd
[gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
241 | #if 0 |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
242 | static void |
| 15882 | 243 | pidgin_quit_cb() |
| 14743 | 244 | { |
| 245 | /* TODO: confirm quit while pending */ | |
| 246 | } | |
|
14745
d43256e1e6fd
[gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
247 | #endif |
| 14743 | 248 | |
| 249 | static void | |
| 250 | docklet_update_status_cb(void *data) | |
| 251 | { | |
| 252 | docklet_update_status(); | |
| 253 | } | |
| 254 | ||
| 255 | static void | |
| 15884 | 256 | docklet_conv_updated_cb(PurpleConversation *conv, PurpleConvUpdateType type) |
| 14743 | 257 | { |
| 15884 | 258 | if (type == PURPLE_CONV_UPDATE_UNSEEN) |
| 14743 | 259 | docklet_update_status(); |
| 260 | } | |
| 261 | ||
| 262 | static void | |
| 15884 | 263 | docklet_signed_on_cb(PurpleConnection *gc) |
| 14743 | 264 | { |
| 265 | if (!enable_join_chat) { | |
| 15884 | 266 | if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
| 14743 | 267 | enable_join_chat = TRUE; |
| 268 | } | |
| 269 | docklet_update_status(); | |
| 270 | } | |
| 271 | ||
| 272 | static void | |
| 15884 | 273 | docklet_signed_off_cb(PurpleConnection *gc) |
| 14743 | 274 | { |
| 275 | if (enable_join_chat) { | |
| 15884 | 276 | if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
| 14743 | 277 | enable_join_chat = online_account_supports_chat(); |
| 278 | } | |
| 279 | docklet_update_status(); | |
| 280 | } | |
| 281 | ||
| 14947 | 282 | static void |
| 15884 | 283 | docklet_show_pref_changed_cb(const char *name, PurplePrefType type, |
| 14947 | 284 | gconstpointer value, gpointer data) |
| 285 | { | |
| 286 | const char *val = value; | |
| 287 | if (!strcmp(val, "always")) { | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
288 | if (ui_ops->create) { |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
289 | if (!visible) |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
290 | ui_ops->create(); |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
291 | else if (!visibility_manager) { |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
292 | pidgin_blist_visibility_manager_add(); |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
293 | visibility_manager = TRUE; |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
294 | } |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
295 | } |
| 14947 | 296 | } else if (!strcmp(val, "never")) { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
297 | if (visible && ui_ops->destroy) |
| 14947 | 298 | ui_ops->destroy(); |
| 299 | } else { | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
300 | if (visibility_manager) { |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
301 | pidgin_blist_visibility_manager_remove(); |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
302 | visibility_manager = FALSE; |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
303 | } |
| 14947 | 304 | docklet_update_status(); |
| 305 | } | |
|
15075
2bd60dbd8877
[gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents:
14954
diff
changeset
|
306 | |
| 14947 | 307 | } |
| 308 | ||
| 14743 | 309 | /************************************************************************** |
| 310 | * docklet pop-up menu | |
| 311 | **************************************************************************/ | |
| 312 | static void | |
| 313 | docklet_toggle_mute(GtkWidget *toggle, void *data) | |
| 314 | { | |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
315 | purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/sound/mute", GTK_CHECK_MENU_ITEM(toggle)->active); |
| 14743 | 316 | } |
| 317 | ||
| 318 | static void | |
| 14875 | 319 | docklet_toggle_blink(GtkWidget *toggle, void *data) |
| 320 | { | |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
321 | purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/blink", GTK_CHECK_MENU_ITEM(toggle)->active); |
| 14875 | 322 | } |
| 323 | ||
| 324 | static void | |
| 14743 | 325 | docklet_toggle_blist(GtkWidget *toggle, void *data) |
| 326 | { | |
| 15884 | 327 | purple_blist_set_visible(GTK_CHECK_MENU_ITEM(toggle)->active); |
| 14743 | 328 | } |
| 329 | ||
| 330 | #ifdef _WIN32 | |
| 331 | /* This is a workaround for a bug in windows GTK+. Clicking outside of the | |
| 332 | menu does not get rid of it, so instead we get rid of it as soon as the | |
| 333 | pointer leaves the menu. */ | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
334 | static gboolean |
| 14743 | 335 | hide_docklet_menu(gpointer data) |
| 336 | { | |
| 337 | if (data != NULL) { | |
| 338 | gtk_menu_popdown(GTK_MENU(data)); | |
| 339 | } | |
| 340 | return FALSE; | |
| 341 | } | |
| 342 | ||
| 343 | static gboolean | |
| 344 | docklet_menu_leave_enter(GtkWidget *menu, GdkEventCrossing *event, void *data) | |
| 345 | { | |
| 346 | static guint hide_docklet_timer = 0; | |
| 347 | if (event->type == GDK_LEAVE_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) { | |
| 15884 | 348 | purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu leave-notify-event\n"); |
| 14743 | 349 | /* Add some slop so that the menu doesn't annoyingly disappear when mousing around */ |
| 350 | if (hide_docklet_timer == 0) { | |
| 15884 | 351 | hide_docklet_timer = purple_timeout_add(500, |
| 14743 | 352 | hide_docklet_menu, menu); |
| 353 | } | |
| 354 | } else if (event->type == GDK_ENTER_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) { | |
| 15884 | 355 | purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu enter-notify-event\n"); |
| 14743 | 356 | if (hide_docklet_timer != 0) { |
| 357 | /* Cancel the hiding if we reenter */ | |
| 358 | ||
| 15884 | 359 | purple_timeout_remove(hide_docklet_timer); |
| 14743 | 360 | hide_docklet_timer = 0; |
| 361 | } | |
| 362 | } | |
| 363 | return FALSE; | |
| 364 | } | |
| 365 | #endif | |
| 366 | ||
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
367 | /* There is a lot of code here for handling the status submenu, much of |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
368 | * which is duplicated from the gtkstatusbox. It'd be nice to add API |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
369 | * somewhere to simplify this (either in the statusbox, or in libpurple). |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
370 | */ |
| 14743 | 371 | static void |
| 372 | show_custom_status_editor_cb(GtkMenuItem *menuitem, gpointer user_data) | |
| 373 | { | |
| 15884 | 374 | PurpleSavedStatus *saved_status; |
| 375 | saved_status = purple_savedstatus_get_current(); | |
|
16179
bdf68342e1ce
sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents:
16129
diff
changeset
|
376 | |
|
bdf68342e1ce
sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents:
16129
diff
changeset
|
377 | if (purple_savedstatus_get_type(saved_status) == PURPLE_STATUS_AVAILABLE) |
|
bdf68342e1ce
sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents:
16129
diff
changeset
|
378 | saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AWAY); |
|
bdf68342e1ce
sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents:
16129
diff
changeset
|
379 | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
380 | pidgin_status_editor_show(FALSE, |
| 15884 | 381 | purple_savedstatus_is_transient(saved_status) ? saved_status : NULL); |
| 14743 | 382 | } |
| 383 | ||
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
384 | static PurpleSavedStatus * |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
385 | create_transient_status(PurpleStatusPrimitive primitive, PurpleStatusType *status_type) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
386 | { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
387 | PurpleSavedStatus *saved_status = purple_savedstatus_new(NULL, primitive); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
388 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
389 | if(status_type != NULL) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
390 | GList *tmp, *active_accts = purple_accounts_get_all_active(); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
391 | for (tmp = active_accts; tmp != NULL; tmp = tmp->next) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
392 | purple_savedstatus_set_substatus(saved_status, |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
393 | (PurpleAccount*) tmp->data, status_type, NULL); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
394 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
395 | g_list_free(active_accts); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
396 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
397 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
398 | return saved_status; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
399 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
400 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
401 | static void |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
402 | activate_status_account_cb(GtkMenuItem *menuitem, gpointer user_data) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
403 | { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
404 | PurpleStatusType *status_type; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
405 | PurpleStatusPrimitive primitive; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
406 | PurpleSavedStatus *saved_status = NULL; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
407 | GList *iter = purple_savedstatuses_get_all(); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
408 | GList *tmp, *active_accts = purple_accounts_get_all_active(); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
409 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
410 | status_type = (PurpleStatusType *)user_data; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
411 | primitive = purple_status_type_get_primitive(status_type); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
412 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
413 | for (; iter != NULL; iter = iter->next) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
414 | PurpleSavedStatus *ss = iter->data; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
415 | if ((purple_savedstatus_get_type(ss) == primitive) && purple_savedstatus_is_transient(ss) && |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
416 | purple_savedstatus_has_substatuses(ss)) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
417 | { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
418 | gboolean found = FALSE; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
419 | /* The currently enabled accounts must have substatuses for all the active accts */ |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
420 | for(tmp = active_accts; tmp != NULL; tmp = tmp->next) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
421 | PurpleAccount *acct = tmp->data; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
422 | PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
423 | if (sub) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
424 | const PurpleStatusType *sub_type = purple_savedstatus_substatus_get_type(sub); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
425 | const char *subtype_status_id = purple_status_type_get_id(sub_type); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
426 | if (subtype_status_id && !strcmp(subtype_status_id, |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
427 | purple_status_type_get_id(status_type))) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
428 | found = TRUE; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
429 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
430 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
431 | if (!found) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
432 | continue; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
433 | saved_status = ss; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
434 | break; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
435 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
436 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
437 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
438 | g_list_free(active_accts); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
439 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
440 | /* Create a new transient saved status if we weren't able to find one */ |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
441 | if (saved_status == NULL) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
442 | saved_status = create_transient_status(primitive, status_type); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
443 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
444 | /* Set the status for each account */ |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
445 | purple_savedstatus_activate(saved_status); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
446 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
447 | |
| 14743 | 448 | static void |
| 449 | activate_status_primitive_cb(GtkMenuItem *menuitem, gpointer user_data) | |
| 450 | { | |
| 15884 | 451 | PurpleStatusPrimitive primitive; |
| 452 | PurpleSavedStatus *saved_status; | |
| 14743 | 453 | |
| 454 | primitive = GPOINTER_TO_INT(user_data); | |
| 455 | ||
| 456 | /* Try to lookup an already existing transient saved status */ | |
| 15884 | 457 | saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, NULL); |
| 14743 | 458 | |
| 459 | /* Create a new transient saved status if we weren't able to find one */ | |
| 460 | if (saved_status == NULL) | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
461 | saved_status = create_transient_status(primitive, NULL); |
| 14743 | 462 | |
| 463 | /* Set the status for each account */ | |
| 15884 | 464 | purple_savedstatus_activate(saved_status); |
| 14743 | 465 | } |
| 466 | ||
| 467 | static void | |
| 468 | activate_saved_status_cb(GtkMenuItem *menuitem, gpointer user_data) | |
| 469 | { | |
| 470 | time_t creation_time; | |
| 15884 | 471 | PurpleSavedStatus *saved_status; |
| 14743 | 472 | |
| 473 | creation_time = GPOINTER_TO_INT(user_data); | |
| 15884 | 474 | saved_status = purple_savedstatus_find_by_creation_time(creation_time); |
| 14743 | 475 | if (saved_status != NULL) |
| 15884 | 476 | purple_savedstatus_activate(saved_status); |
| 14743 | 477 | } |
| 478 | ||
| 479 | static GtkWidget * | |
| 15884 | 480 | new_menu_item_with_status_icon(GtkWidget *menu, const char *str, PurpleStatusPrimitive primitive, GtkSignalFunc sf, gpointer data, guint accel_key, guint accel_mods, char *mod) |
| 14743 | 481 | { |
| 482 | GtkWidget *menuitem; | |
| 483 | GdkPixbuf *pixbuf; | |
| 484 | GtkWidget *image; | |
| 485 | ||
|
20953
e39a56e1b461
Patch from QuLogic to not use underscores in saved-statuses as mnemonics
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20380
diff
changeset
|
486 | menuitem = gtk_image_menu_item_new_with_label(str); |
| 14743 | 487 | |
| 488 | if (menu) | |
| 489 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 490 | ||
| 491 | if (sf) | |
| 492 | g_signal_connect(G_OBJECT(menuitem), "activate", sf, data); | |
| 493 | ||
|
15799
ba7af742a0d1
Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents:
15766
diff
changeset
|
494 | pixbuf = pidgin_create_status_icon(primitive, menu, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); |
| 14743 | 495 | image = gtk_image_new_from_pixbuf(pixbuf); |
| 496 | g_object_unref(pixbuf); | |
| 497 | gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
| 498 | ||
| 499 | gtk_widget_show_all(menuitem); | |
| 500 | ||
| 501 | return menuitem; | |
| 502 | } | |
| 503 | ||
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
504 | static void |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
505 | add_account_statuses(GtkWidget *menu, PurpleAccount *account) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
506 | { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
507 | GList *l; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
508 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
509 | for (l = purple_account_get_status_types(account); l != NULL; l = l->next) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
510 | PurpleStatusType *status_type = (PurpleStatusType *)l->data; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
511 | PurpleStatusPrimitive prim; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
512 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
513 | if (!purple_status_type_is_user_settable(status_type)) |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
514 | continue; |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
515 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
516 | prim = purple_status_type_get_primitive(status_type); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
517 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
518 | new_menu_item_with_status_icon(menu, |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
519 | purple_status_type_get_name(status_type), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
520 | prim, G_CALLBACK(activate_status_account_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
521 | status_type, 0, 0, NULL); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
522 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
523 | } |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
524 | |
| 14743 | 525 | static GtkWidget * |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21453
diff
changeset
|
526 | docklet_status_submenu(void) |
| 14743 | 527 | { |
| 528 | GtkWidget *submenu, *menuitem; | |
| 529 | GList *popular_statuses, *cur; | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
530 | PidginStatusBox *statusbox = NULL; |
| 14743 | 531 | |
| 532 | submenu = gtk_menu_new(); | |
|
23343
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
533 | menuitem = gtk_menu_item_new_with_mnemonic(_("_Change Status")); |
| 14743 | 534 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
| 535 | ||
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
536 | if(pidgin_blist_get_default_gtk_blist() != NULL) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
537 | statusbox = PIDGIN_STATUS_BOX(pidgin_blist_get_default_gtk_blist()->statusbox); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
538 | } |
| 14743 | 539 | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
540 | if(statusbox && statusbox->account != NULL) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
541 | add_account_statuses(submenu, statusbox->account); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
542 | } else if(statusbox && statusbox->token_status_account != NULL) { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
543 | add_account_statuses(submenu, statusbox->token_status_account); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
544 | } else { |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
545 | new_menu_item_with_status_icon(submenu, _("Available"), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
546 | PURPLE_STATUS_AVAILABLE, G_CALLBACK(activate_status_primitive_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
547 | GINT_TO_POINTER(PURPLE_STATUS_AVAILABLE), 0, 0, NULL); |
| 14743 | 548 | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
549 | new_menu_item_with_status_icon(submenu, _("Away"), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
550 | PURPLE_STATUS_AWAY, G_CALLBACK(activate_status_primitive_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
551 | GINT_TO_POINTER(PURPLE_STATUS_AWAY), 0, 0, NULL); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
552 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
553 | new_menu_item_with_status_icon(submenu, _("Do not disturb"), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
554 | PURPLE_STATUS_UNAVAILABLE, G_CALLBACK(activate_status_primitive_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
555 | GINT_TO_POINTER(PURPLE_STATUS_UNAVAILABLE), 0, 0, NULL); |
| 14743 | 556 | |
|
21011
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
557 | new_menu_item_with_status_icon(submenu, _("Invisible"), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
558 | PURPLE_STATUS_INVISIBLE, G_CALLBACK(activate_status_primitive_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
559 | GINT_TO_POINTER(PURPLE_STATUS_INVISIBLE), 0, 0, NULL); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
560 | |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
561 | new_menu_item_with_status_icon(submenu, _("Offline"), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
562 | PURPLE_STATUS_OFFLINE, G_CALLBACK(activate_status_primitive_cb), |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
563 | GINT_TO_POINTER(PURPLE_STATUS_OFFLINE), 0, 0, NULL); |
|
0b21b3224a68
Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents:
20960
diff
changeset
|
564 | } |
| 14743 | 565 | |
| 15884 | 566 | popular_statuses = purple_savedstatuses_get_popular(6); |
| 14743 | 567 | if (popular_statuses != NULL) |
| 15568 | 568 | pidgin_separator(submenu); |
| 14743 | 569 | for (cur = popular_statuses; cur != NULL; cur = cur->next) |
| 570 | { | |
| 15884 | 571 | PurpleSavedStatus *saved_status = cur->data; |
| 572 | time_t creation_time = purple_savedstatus_get_creation_time(saved_status); | |
| 15882 | 573 | new_menu_item_with_status_icon(submenu, |
| 15884 | 574 | purple_savedstatus_get_title(saved_status), |
| 575 | purple_savedstatus_get_type(saved_status), G_CALLBACK(activate_saved_status_cb), | |
| 14743 | 576 | GINT_TO_POINTER(creation_time), 0, 0, NULL); |
| 577 | } | |
| 578 | g_list_free(popular_statuses); | |
| 579 | ||
| 15568 | 580 | pidgin_separator(submenu); |
| 14743 | 581 | |
|
16960
6d97980fed84
Telcontar on #pidgin-win32 pointed out that the "New..." and "Saved..."
Casey Harkins <charkins@pidgin.im>
parents:
16918
diff
changeset
|
582 | pidgin_new_item_from_stock(submenu, _("New..."), NULL, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL); |
|
6d97980fed84
Telcontar on #pidgin-win32 pointed out that the "New..." and "Saved..."
Casey Harkins <charkins@pidgin.im>
parents:
16918
diff
changeset
|
583 | pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); |
| 14743 | 584 | |
| 585 | return menuitem; | |
| 586 | } | |
| 587 | ||
|
20959
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
588 | |
|
20960
b0c77b970912
merge of 'e39a56e1b46110397f5043f21bb86f8cd920012d'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
diff
changeset
|
589 | |
|
20959
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
590 | static void |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
591 | plugin_act(GtkObject *obj, PurplePluginAction *pam) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
592 | { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
593 | if (pam && pam->callback) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
594 | pam->callback(pam); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
595 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
596 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
597 | static void |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
598 | build_plugin_actions(GtkWidget *menu, PurplePlugin *plugin, |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
599 | gpointer context) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
600 | { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
601 | GtkWidget *menuitem; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
602 | PurplePluginAction *action = NULL; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
603 | GList *actions, *l; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
604 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
605 | actions = PURPLE_PLUGIN_ACTIONS(plugin, context); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
606 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
607 | for (l = actions; l != NULL; l = l->next) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
608 | { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
609 | if (l->data) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
610 | { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
611 | action = (PurplePluginAction *) l->data; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
612 | action->plugin = plugin; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
613 | action->context = context; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
614 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
615 | menuitem = gtk_menu_item_new_with_label(action->label); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
616 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
617 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
618 | g_signal_connect(G_OBJECT(menuitem), "activate", |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
619 | G_CALLBACK(plugin_act), action); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
620 | g_object_set_data_full(G_OBJECT(menuitem), "plugin_action", |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
621 | action, |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
622 | (GDestroyNotify)purple_plugin_action_free); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
623 | gtk_widget_show(menuitem); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
624 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
625 | else |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
626 | pidgin_separator(menu); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
627 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
628 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
629 | g_list_free(actions); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
630 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
631 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
632 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
633 | static void |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
634 | docklet_plugin_actions(GtkWidget *menu) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
635 | { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
636 | GtkWidget *menuitem, *submenu; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
637 | PurplePlugin *plugin = NULL; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
638 | GList *l; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
639 | int c = 0; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
640 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
641 | g_return_if_fail(menu != NULL); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
642 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
643 | /* Add a submenu for each plugin with custom actions */ |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
644 | for (l = purple_plugins_get_loaded(); l; l = l->next) { |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
645 | plugin = (PurplePlugin *) l->data; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
646 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
647 | if (PURPLE_IS_PROTOCOL_PLUGIN(plugin)) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
648 | continue; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
649 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
650 | if (!PURPLE_PLUGIN_HAS_ACTIONS(plugin)) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
651 | continue; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
652 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
653 | menuitem = gtk_image_menu_item_new_with_label(_(plugin->info->name)); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
654 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
655 | gtk_widget_show(menuitem); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
656 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
657 | submenu = gtk_menu_new(); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
658 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
659 | gtk_widget_show(submenu); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
660 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
661 | build_plugin_actions(submenu, plugin, NULL); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
662 | |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
663 | c++; |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
664 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
665 | if(c>0) |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
666 | pidgin_separator(menu); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
667 | } |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
668 | |
| 14743 | 669 | static void |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21453
diff
changeset
|
670 | docklet_menu(void) |
|
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21453
diff
changeset
|
671 | { |
| 14743 | 672 | static GtkWidget *menu = NULL; |
| 673 | GtkWidget *menuitem; | |
| 674 | ||
| 675 | if (menu) { | |
| 676 | gtk_widget_destroy(menu); | |
| 677 | } | |
| 678 | ||
| 679 | menu = gtk_menu_new(); | |
| 680 | ||
|
23344
edd0045bf715
Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents:
23343
diff
changeset
|
681 | menuitem = gtk_check_menu_item_new_with_mnemonic(_("Show Buddy _List")); |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
682 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/list_visible")); |
| 14743 | 683 | g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blist), NULL); |
| 684 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 685 | ||
|
23343
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
686 | menuitem = gtk_menu_item_new_with_mnemonic(_("_Unread Messages")); |
| 14743 | 687 | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
688 | if (pending) { |
| 14743 | 689 | GtkWidget *submenu = gtk_menu_new(); |
| 690 | GList *l = get_pending_list(0); | |
| 691 | if (l == NULL) { | |
| 692 | gtk_widget_set_sensitive(menuitem, FALSE); | |
| 15884 | 693 | purple_debug_warning("docklet", |
| 14743 | 694 | "status indicates messages pending, but no conversations with unseen messages were found."); |
| 695 | } else { | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
696 | pidgin_conversations_fill_menu(submenu, l); |
| 14743 | 697 | g_list_free(l); |
| 698 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
| 699 | } | |
| 700 | } else { | |
| 701 | gtk_widget_set_sensitive(menuitem, FALSE); | |
| 702 | } | |
| 703 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 704 | ||
| 15568 | 705 | pidgin_separator(menu); |
| 14743 | 706 | |
|
23344
edd0045bf715
Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents:
23343
diff
changeset
|
707 | menuitem = pidgin_new_item_from_stock(menu, _("New _Message..."), PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, G_CALLBACK(pidgin_dialogs_im), NULL, 0, 0, NULL); |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
708 | if (status == PURPLE_STATUS_OFFLINE) |
| 14743 | 709 | gtk_widget_set_sensitive(menuitem, FALSE); |
| 710 | ||
|
23848
d017d45e3dcf
Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents:
23344
diff
changeset
|
711 | menuitem = pidgin_new_item_from_stock(menu, _("Join Chat..."), PIDGIN_STOCK_CHAT, |
|
d017d45e3dcf
Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents:
23344
diff
changeset
|
712 | G_CALLBACK(pidgin_blist_joinchat_show), NULL, 0, 0, NULL); |
|
d017d45e3dcf
Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents:
23344
diff
changeset
|
713 | if (status == PURPLE_STATUS_OFFLINE) |
|
d017d45e3dcf
Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents:
23344
diff
changeset
|
714 | gtk_widget_set_sensitive(menuitem, FALSE); |
|
d017d45e3dcf
Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents:
23344
diff
changeset
|
715 | |
| 14743 | 716 | menuitem = docklet_status_submenu(); |
| 717 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 718 | ||
| 15568 | 719 | pidgin_separator(menu); |
| 14743 | 720 | |
|
23343
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
721 | pidgin_new_item_from_stock(menu, _("_Accounts"), NULL, G_CALLBACK(pidgin_accounts_window_show), NULL, 0, 0, NULL); |
|
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
722 | pidgin_new_item_from_stock(menu, _("Plu_gins"), PIDGIN_STOCK_TOOLBAR_PLUGINS, G_CALLBACK(pidgin_plugin_dialog_show), NULL, 0, 0, NULL); |
|
23344
edd0045bf715
Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents:
23343
diff
changeset
|
723 | pidgin_new_item_from_stock(menu, _("Pr_eferences"), GTK_STOCK_PREFERENCES, G_CALLBACK(pidgin_prefs_show), NULL, 0, 0, NULL); |
| 14743 | 724 | |
| 15568 | 725 | pidgin_separator(menu); |
| 14743 | 726 | |
|
23344
edd0045bf715
Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents:
23343
diff
changeset
|
727 | menuitem = gtk_check_menu_item_new_with_mnemonic(_("Mute _Sounds")); |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
728 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/sound/mute")); |
|
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
729 | if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), "none")) |
| 14743 | 730 | gtk_widget_set_sensitive(GTK_WIDGET(menuitem), FALSE); |
| 731 | g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); | |
| 732 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
733 | |
|
23343
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
734 | menuitem = gtk_check_menu_item_new_with_mnemonic(_("_Blink on New Message")); |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
735 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")); |
| 14875 | 736 | g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blink), NULL); |
| 737 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 14743 | 738 | |
| 15568 | 739 | pidgin_separator(menu); |
| 14743 | 740 | |
|
20959
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
741 | /* add plugin actions */ |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
742 | docklet_plugin_actions(menu); |
|
8ccaaaec1b01
Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents:
20380
diff
changeset
|
743 | |
|
23343
397c4abd815a
A patch from Kevin Wu Won to add mnemonics to the docklet menu.
Kevin Wu Won <exclipy@gmail.com>
parents:
22108
diff
changeset
|
744 | pidgin_new_item_from_stock(menu, _("_Quit"), GTK_STOCK_QUIT, G_CALLBACK(purple_core_quit), NULL, 0, 0, NULL); |
| 14743 | 745 | |
| 746 | #ifdef _WIN32 | |
| 747 | g_signal_connect(menu, "leave-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL); | |
| 748 | g_signal_connect(menu, "enter-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL); | |
| 749 | #endif | |
| 750 | gtk_widget_show_all(menu); | |
| 751 | gtk_menu_popup(GTK_MENU(menu), NULL, NULL, | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
752 | ui_ops->position_menu, |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
753 | NULL, 0, gtk_get_current_event_time()); |
| 14743 | 754 | } |
| 755 | ||
| 756 | /************************************************************************** | |
| 757 | * public api for ui_ops | |
| 758 | **************************************************************************/ | |
| 759 | void | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
760 | pidgin_docklet_update_icon() |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
761 | { |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
762 | if (ui_ops && ui_ops->update_icon) |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
763 | ui_ops->update_icon(status, connecting, pending); |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
764 | } |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
765 | |
|
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
766 | void |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
767 | pidgin_docklet_clicked(int button_type) |
| 14743 | 768 | { |
| 769 | switch (button_type) { | |
| 770 | case 1: | |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
771 | if (pending) { |
| 14743 | 772 | GList *l = get_pending_list(1); |
| 773 | if (l != NULL) { | |
|
21022
eb7d727949e7
Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents:
21014
diff
changeset
|
774 | pidgin_conv_present_conversation((PurpleConversation *)l->data); |
| 14743 | 775 | g_list_free(l); |
| 776 | } | |
| 777 | } else { | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
778 | pidgin_blist_toggle_visibility(); |
| 14743 | 779 | } |
| 780 | break; | |
| 781 | case 3: | |
| 782 | docklet_menu(); | |
| 783 | break; | |
| 784 | } | |
| 785 | } | |
| 786 | ||
| 787 | void | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
788 | pidgin_docklet_embedded() |
| 14743 | 789 | { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
790 | if (!visibility_manager |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
791 | && strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/docklet/show"), "pending")) { |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
792 | pidgin_blist_visibility_manager_add(); |
| 14743 | 793 | visibility_manager = TRUE; |
| 794 | } | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
795 | visible = TRUE; |
| 14743 | 796 | docklet_update_status(); |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
797 | pidgin_docklet_update_icon(); |
| 14743 | 798 | } |
| 799 | ||
| 800 | void | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
801 | pidgin_docklet_remove() |
| 14743 | 802 | { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
803 | if (visible) { |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
804 | if (visibility_manager) { |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
805 | pidgin_blist_visibility_manager_remove(); |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
806 | visibility_manager = FALSE; |
|
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
807 | } |
| 14935 | 808 | if (docklet_blinking_timer) { |
| 809 | g_source_remove(docklet_blinking_timer); | |
| 810 | docklet_blinking_timer = 0; | |
| 811 | } | |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
812 | visible = FALSE; |
|
16996
749cb2af2e40
Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents:
16977
diff
changeset
|
813 | status = PURPLE_STATUS_OFFLINE; |
| 14743 | 814 | } |
| 815 | } | |
| 816 | ||
| 817 | void | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
818 | pidgin_docklet_set_ui_ops(struct docklet_ui_ops *ops) |
| 14743 | 819 | { |
| 820 | ui_ops = ops; | |
| 821 | } | |
| 822 | ||
| 823 | void* | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
824 | pidgin_docklet_get_handle() |
| 14743 | 825 | { |
| 826 | static int i; | |
| 827 | return &i; | |
| 828 | } | |
| 829 | ||
|
14745
d43256e1e6fd
[gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
830 | void |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
831 | pidgin_docklet_init() |
| 14743 | 832 | { |
| 15884 | 833 | void *conn_handle = purple_connections_get_handle(); |
| 834 | void *conv_handle = purple_conversations_get_handle(); | |
| 835 | void *accounts_handle = purple_accounts_get_handle(); | |
|
16918
d395c2be4cb1
Docklet icon is now tied to the saved status, so listen to the
Casey Harkins <charkins@pidgin.im>
parents:
16808
diff
changeset
|
836 | void *status_handle = purple_savedstatuses_get_handle(); |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
837 | void *docklet_handle = pidgin_docklet_get_handle(); |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
838 | |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
839 | purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet"); |
|
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
840 | purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/blink", FALSE); |
|
19215
7a4ee0715da8
reverting the show docklet preference the correct way
Ka-Hing Cheung <khc@pidgin.im>
parents:
19129
diff
changeset
|
841 | purple_prefs_add_string(PIDGIN_PREFS_ROOT "/docklet/show", "always"); |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
842 | purple_prefs_connect_callback(docklet_handle, PIDGIN_PREFS_ROOT "/docklet/show", |
| 14947 | 843 | docklet_show_pref_changed_cb, NULL); |
| 14743 | 844 | |
| 845 | docklet_ui_init(); | |
|
16123
8b98683319e7
Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
846 | if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/docklet/show"), "always") && ui_ops && ui_ops->create) |
| 14743 | 847 | ui_ops->create(); |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
848 | |
| 15884 | 849 | purple_signal_connect(conn_handle, "signed-on", |
| 850 | docklet_handle, PURPLE_CALLBACK(docklet_signed_on_cb), NULL); | |
| 851 | purple_signal_connect(conn_handle, "signed-off", | |
| 852 | docklet_handle, PURPLE_CALLBACK(docklet_signed_off_cb), NULL); | |
|
16918
d395c2be4cb1
Docklet icon is now tied to the saved status, so listen to the
Casey Harkins <charkins@pidgin.im>
parents:
16808
diff
changeset
|
853 | purple_signal_connect(accounts_handle, "account-connecting", |
| 15884 | 854 | docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); |
| 855 | purple_signal_connect(conv_handle, "received-im-msg", | |
| 856 | docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); | |
| 857 | purple_signal_connect(conv_handle, "conversation-created", | |
| 858 | docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); | |
| 859 | purple_signal_connect(conv_handle, "deleting-conversation", | |
| 860 | docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); | |
| 861 | purple_signal_connect(conv_handle, "conversation-updated", | |
| 862 | docklet_handle, PURPLE_CALLBACK(docklet_conv_updated_cb), NULL); | |
|
16918
d395c2be4cb1
Docklet icon is now tied to the saved status, so listen to the
Casey Harkins <charkins@pidgin.im>
parents:
16808
diff
changeset
|
863 | purple_signal_connect(status_handle, "savedstatus-changed", |
|
d395c2be4cb1
Docklet icon is now tied to the saved status, so listen to the
Casey Harkins <charkins@pidgin.im>
parents:
16808
diff
changeset
|
864 | docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); |
|
14745
d43256e1e6fd
[gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
865 | #if 0 |
| 15884 | 866 | purple_signal_connect(purple_get_core(), "quitting", |
| 867 | docklet_handle, PURPLE_CALLBACK(purple_quit_cb), NULL); | |
|
14745
d43256e1e6fd
[gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
868 | #endif |
| 14743 | 869 | |
| 870 | enable_join_chat = online_account_supports_chat(); | |
| 871 | } | |
| 872 | ||
| 873 | void | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
874 | pidgin_docklet_uninit() |
| 14743 | 875 | { |
|
15077
38a44f14dd35
[gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents:
15075
diff
changeset
|
876 | if (visible && ui_ops && ui_ops->destroy) |
| 14743 | 877 | ui_ops->destroy(); |
| 878 | } |