pidgin/gtkdocklet.c

Wed, 21 Sep 2011 06:45:26 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Wed, 21 Sep 2011 06:45:26 +0000
changeset 32575
eb4fc932fae9
parent 32341
6b2256808cad
child 32678
01f6312a4a7b
child 32900
9985c4a0e27b
permissions
-rw-r--r--

Apply conversation theme when opening the GTK conversation. All the
parsing stuff was moved out of the theme code and into the conversation
code.

Someone (not me!) needs to check the code I commented out and see if
we really need that stuff (and then port it to WebKit/styling).

We also need to determine where to place Template.html and the rest
of our (not-yet-written) default theme.

14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2 * System tray icon (aka docklet) plugin for Purple
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 *
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org>
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
5 * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com>
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
6 * Inspired by a similar plugin by:
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 * John (J5) Palmieri <johnp@martianrock.com>
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
8 *
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
10 * modify it under the terms of the GNU General Public License as
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
11 * published by the Free Software Foundation; either version 2 of the
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
12 * License, or (at your option) any later version.
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 *
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 * General Public License for more details.
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 *
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
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
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
23 */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
15577
b8129373f65e More pidgin changes
Sean Egan <seanegan@pidgin.im>
parents: 15570
diff changeset
25 #include "pidgin.h"
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
26
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
27 #include "core.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
28 #include "conversation.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
29 #include "debug.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
30 #include "prefs.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
31 #include "signals.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
32 #include "sound.h"
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
33 #include "status.h"
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
34
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
35 #include "gtkaccount.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36 #include "gtkblist.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
37 #include "gtkconv.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
38 #include "gtkplugin.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
39 #include "gtkprefs.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
40 #include "gtksavedstatuses.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
41 #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
42 #include "gtkstatusbox.h"
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
43 #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
44 #include "pidginstock.h"
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
45 #include "gtkdocklet.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
46 #include "gtkdialogs.h"
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
47
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
48 #ifndef DOCKLET_TOOLTIP_LINE_LIMIT
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
49 #define DOCKLET_TOOLTIP_LINE_LIMIT 5
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
50 #endif
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
52 #define SHORT_EMBED_TIMEOUT 5
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
53 #define LONG_EMBED_TIMEOUT 15
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
54
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55 /* globals */
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
56 static GtkStatusIcon *docklet = NULL;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
57 static guint embed_timeout = 0;
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
58 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
59 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
60 static gboolean connecting = FALSE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
61 static gboolean enable_join_chat = FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
62 static guint docklet_blinking_timer = 0;
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
63 static gboolean visible = FALSE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64 static gboolean visibility_manager = FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
65
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
66 /* protos */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
67 static void docklet_gtk_status_create(gboolean);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
68 static void docklet_gtk_status_destroy(void);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
69
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
70 /**************************************************************************
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 * docklet status and utility functions
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
72 **************************************************************************/
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
73 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
74 docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
75 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
76 const gchar *icon_name = NULL;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
77
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
78 switch (status) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
79 case PURPLE_STATUS_OFFLINE:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
80 icon_name = PIDGIN_STOCK_TRAY_OFFLINE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
81 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
82 case PURPLE_STATUS_AWAY:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
83 icon_name = PIDGIN_STOCK_TRAY_AWAY;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
84 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
85 case PURPLE_STATUS_UNAVAILABLE:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
86 icon_name = PIDGIN_STOCK_TRAY_BUSY;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
87 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
88 case PURPLE_STATUS_EXTENDED_AWAY:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
89 icon_name = PIDGIN_STOCK_TRAY_XA;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
90 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
91 case PURPLE_STATUS_INVISIBLE:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
92 icon_name = PIDGIN_STOCK_TRAY_INVISIBLE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
93 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
94 default:
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
95 icon_name = PIDGIN_STOCK_TRAY_AVAILABLE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
96 break;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
97 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
98
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
99 if (pending)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
100 icon_name = PIDGIN_STOCK_TRAY_PENDING;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
101 if (connecting)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
102 icon_name = PIDGIN_STOCK_TRAY_CONNECT;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
103
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
104 if (icon_name) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
105 gtk_status_icon_set_from_icon_name(docklet, icon_name);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
106 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
107
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
108 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
109 gtk_status_icon_set_blinking(docklet, (pending && !connecting));
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
110 } else if (gtk_status_icon_get_blinking(docklet)) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
111 gtk_status_icon_set_blinking(docklet, FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
112 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
113 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
114
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
115 static gboolean
22108
cb9819851163 Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents: 22104
diff changeset
116 docklet_blink_icon(gpointer data)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
117 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
118 static gboolean blinked = FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
119 gboolean ret = FALSE; /* by default, don't keep blinking */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
120
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121 blinked = !blinked;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122
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
123 if(pending && !connecting) {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
124 if (!blinked) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
125 docklet_gtk_status_update_icon(status, connecting, 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
126 }
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16977
diff changeset
127 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
128 } 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
129 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
130 blinked = FALSE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
132
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
133 return ret;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
135
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
136 static GList *
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 get_pending_list(guint max)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 {
25585
694a25f1eaf4 This small optimization has been sitting in my tree for a long time.
Daniel Atallah <datallah@pidgin.im>
parents: 25584
diff changeset
139 GList *l_im, *l_chat;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
141 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
142 PIDGIN_UNSEEN_TEXT,
14813
c24dda7fb69e [gaim-migrate @ 17508]
Casey Harkins <charkins@pidgin.im>
parents: 14745
diff changeset
143 FALSE, max);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
144
25585
694a25f1eaf4 This small optimization has been sitting in my tree for a long time.
Daniel Atallah <datallah@pidgin.im>
parents: 25584
diff changeset
145 /* Short circuit if we have our information already */
694a25f1eaf4 This small optimization has been sitting in my tree for a long time.
Daniel Atallah <datallah@pidgin.im>
parents: 25584
diff changeset
146 if (max == 1 && l_im != NULL)
694a25f1eaf4 This small optimization has been sitting in my tree for a long time.
Daniel Atallah <datallah@pidgin.im>
parents: 25584
diff changeset
147 return l_im;
694a25f1eaf4 This small optimization has been sitting in my tree for a long time.
Daniel Atallah <datallah@pidgin.im>
parents: 25584
diff changeset
148
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
149 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
150 PIDGIN_UNSEEN_NICK,
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
151 FALSE, max);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
152
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
153 if (l_im != NULL && l_chat != NULL)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
154 return g_list_concat(l_im, l_chat);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
155 else if (l_im != NULL)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
156 return l_im;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
157 else
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
158 return l_chat;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
159 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
160
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
161 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
162 docklet_update_status(void)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
163 {
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
164 GList *convs, *l;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
165 int count;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
166 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
167 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
168 gboolean newpending = FALSE, newconnecting = FALSE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
169
16681
c15974a4ff5d Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents: 16263
diff changeset
170 /* 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
171 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
172
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
173 /* determine if any ims have unseen messages */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
174 convs = get_pending_list(DOCKLET_TOOLTIP_LINE_LIMIT);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
175
19215
7a4ee0715da8 reverting the show docklet preference the correct way
Ka-Hing Cheung <khc@pidgin.im>
parents: 19129
diff changeset
176 if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/docklet/show"), "pending")) {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
177 if (convs && !visible) {
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
178 g_list_free(convs);
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
179 docklet_gtk_status_create(FALSE);
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
180 return FALSE;
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
181 } else if (!convs && visible) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
182 docklet_gtk_status_destroy();
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
183 return FALSE;
14935
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
184 }
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
185 }
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
186
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
187 if (!visible) {
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
188 g_list_free(convs);
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
189 return FALSE;
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
190 }
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
191
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
192 if (convs != NULL) {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
193 /* set tooltip if messages are pending */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
194 GString *tooltip_text = g_string_new("");
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
195 newpending = TRUE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
196
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
197 for (l = convs, count = 0 ; l != NULL ; l = l->next, count++) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
198 PurpleConversation *conv = (PurpleConversation *)l->data;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
199 PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
21022
eb7d727949e7 Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents: 21014
diff changeset
200
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
201 if (count == DOCKLET_TOOLTIP_LINE_LIMIT - 1) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
202 g_string_append(tooltip_text, _("Right-click for more unread messages...\n"));
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
203 } else if(gtkconv) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
204 g_string_append_printf(tooltip_text,
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
205 ngettext("%d unread message from %s\n", "%d unread messages from %s\n", gtkconv->unseen_count),
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
206 gtkconv->unseen_count,
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
207 purple_conversation_get_title(conv));
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
208 } else {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
209 g_string_append_printf(tooltip_text,
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
210 ngettext("%d unread message from %s\n", "%d unread messages from %s\n",
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
211 GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count"))),
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
212 GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count")),
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
213 purple_conversation_get_title(conv));
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
217 /* get rid of the last newline */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
218 if (tooltip_text->len > 0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
219 tooltip_text = g_string_truncate(tooltip_text, tooltip_text->len - 1);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
220
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
221 gtk_status_icon_set_tooltip(docklet, tooltip_text->str);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
222
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
223 g_string_free(tooltip_text, TRUE);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
224 g_list_free(convs);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
225
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
226 } else {
16977
c9cb49bea66d Change the PIDGIN_NAME stuff to allow translators to transliterate the
Richard Laager <rlaager@pidgin.im>
parents: 16960
diff changeset
227 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
228 purple_savedstatus_get_title(saved_status), NULL);
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
229 gtk_status_icon_set_tooltip(docklet, tooltip_text);
16681
c15974a4ff5d Patch from charkins in ticket #198 to fulfill a feature request by hbons:
Richard Laager <rlaager@pidgin.im>
parents: 16263
diff changeset
230 g_free(tooltip_text);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
231 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
232
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
233 for(l = purple_accounts_get_all(); l != NULL; l = l->next) {
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
234
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
235 PurpleAccount *account = (PurpleAccount*)l->data;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
236
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
237 if (!purple_account_get_enabled(account, PIDGIN_UI))
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
238 continue;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
239
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
240 if (purple_account_is_disconnected(account))
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
241 continue;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
242
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
243 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
244 newconnecting = TRUE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
245 }
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
246
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
247 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
248
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
249 /* 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
250 if (status != newstatus || pending!=newpending || connecting!=newconnecting) {
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
251 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
252 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
253 connecting = newconnecting;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
254
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
255 docklet_gtk_status_update_icon(status, connecting, pending);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
256
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
257 /* 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
258 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
259 && pending && !connecting && docklet_blinking_timer == 0) {
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
260 docklet_blinking_timer = g_timeout_add(500, docklet_blink_icon, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
261 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
262 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
263
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
264 return FALSE; /* for when we're called by the glib idle handler */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
265 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
266
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
267 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
268 online_account_supports_chat(void)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
269 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
270 GList *c = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
271 c = purple_connections_get_all();
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
272
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
273 while(c != NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
274 PurpleConnection *gc = c->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
275 PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
276 if (prpl_info != NULL && prpl_info->chat_info != NULL)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
277 return TRUE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
278 c = c->next;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
279 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
280
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
281 return FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
282 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
283
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
284 /**************************************************************************
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
285 * callbacks and signal handlers
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
286 **************************************************************************/
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
287 #if 0
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
288 static void
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
289 pidgin_quit_cb()
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
290 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
291 /* TODO: confirm quit while pending */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
292 }
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
293 #endif
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
294
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
295 static void
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
296 docklet_update_status_cb(void *data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
297 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
298 docklet_update_status();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
299 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
300
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
301 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
302 docklet_conv_updated_cb(PurpleConversation *conv, PurpleConvUpdateType type)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
303 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
304 if (type == PURPLE_CONV_UPDATE_UNSEEN)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
305 docklet_update_status();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
306 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
307
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
308 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
309 docklet_signed_on_cb(PurpleConnection *gc)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
310 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
311 if (!enable_join_chat) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
312 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
313 enable_join_chat = TRUE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
314 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
315 docklet_update_status();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
316 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
317
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
318 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
319 docklet_signed_off_cb(PurpleConnection *gc)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
320 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
321 if (enable_join_chat) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
322 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
323 enable_join_chat = online_account_supports_chat();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
324 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
325 docklet_update_status();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
326 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
327
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
328 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
329 docklet_show_pref_changed_cb(const char *name, PurplePrefType type,
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
330 gconstpointer value, gpointer data)
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
331 {
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
332 const char *val = value;
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
333 if (!strcmp(val, "always")) {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
334 if (!visible)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
335 docklet_gtk_status_create(FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
336 else if (!visibility_manager) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
337 pidgin_blist_visibility_manager_add();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
338 visibility_manager = TRUE;
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
339 }
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
340 } else if (!strcmp(val, "never")) {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
341 if (visible)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
342 docklet_gtk_status_destroy();
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
343 } else {
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
344 if (visibility_manager) {
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
345 pidgin_blist_visibility_manager_remove();
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
346 visibility_manager = FALSE;
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
347 }
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
348 docklet_update_status();
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
349 }
15075
2bd60dbd8877 [gaim-migrate @ 17794]
Daniel Atallah <datallah@pidgin.im>
parents: 14954
diff changeset
350
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
351 }
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
352
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
353 /**************************************************************************
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
354 * docklet pop-up menu
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
355 **************************************************************************/
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
356 static void
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
357 docklet_toggle_mute(GtkWidget *toggle, void *data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
358 {
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
359 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/sound/mute", GTK_CHECK_MENU_ITEM(toggle)->active);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
360 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
361
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
362 static void
14875
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
363 docklet_toggle_blink(GtkWidget *toggle, void *data)
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
364 {
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
365 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/blink", GTK_CHECK_MENU_ITEM(toggle)->active);
14875
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
366 }
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
367
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
368 static void
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
369 docklet_toggle_blist(GtkWidget *toggle, void *data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
370 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
371 purple_blist_set_visible(GTK_CHECK_MENU_ITEM(toggle)->active);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
372 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
373
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
374 #ifdef _WIN32
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
375 /* This is a workaround for a bug in windows GTK+. Clicking outside of the
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
376 menu does not get rid of it, so instead we get rid of it as soon as the
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
377 pointer leaves the menu. */
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
378 static gboolean
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
379 hide_docklet_menu(gpointer data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
380 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
381 if (data != NULL) {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
382 gtk_menu_popdown(GTK_MENU(data));
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
383 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
384 return FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
385 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
386
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
387 static gboolean
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
388 docklet_menu_leave_enter(GtkWidget *menu, GdkEventCrossing *event, void *data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
389 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
390 static guint hide_docklet_timer = 0;
25584
be42c007cce2 Fix from "oopepe" to make menus more reliably responsive.
Daniel Atallah <datallah@pidgin.im>
parents: 23848
diff changeset
391
be42c007cce2 Fix from "oopepe" to make menus more reliably responsive.
Daniel Atallah <datallah@pidgin.im>
parents: 23848
diff changeset
392 if (event->type == GDK_LEAVE_NOTIFY && (event->detail == GDK_NOTIFY_ANCESTOR ||
be42c007cce2 Fix from "oopepe" to make menus more reliably responsive.
Daniel Atallah <datallah@pidgin.im>
parents: 23848
diff changeset
393 event->detail == GDK_NOTIFY_UNKNOWN)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
394 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu leave-notify-event\n");
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
395 /* Add some slop so that the menu doesn't annoyingly disappear when mousing around */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
396 if (hide_docklet_timer == 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
397 hide_docklet_timer = purple_timeout_add(500,
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
398 hide_docklet_menu, menu);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
399 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
400 } else if (event->type == GDK_ENTER_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
401 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu enter-notify-event\n");
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
402 if (hide_docklet_timer != 0) {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
403 /* Cancel the hiding if we reenter */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
404
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
405 purple_timeout_remove(hide_docklet_timer);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
406 hide_docklet_timer = 0;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
407 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
408 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
409 return FALSE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
410 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
411 #endif
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
412
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
413 /* 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
414 * 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
415 * 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
416 */
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
417 static void
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
418 show_custom_status_editor_cb(GtkMenuItem *menuitem, gpointer user_data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
419 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
420 PurpleSavedStatus *saved_status;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
421 saved_status = purple_savedstatus_get_current();
16179
bdf68342e1ce sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents: 16129
diff changeset
422
bdf68342e1ce sf patch #1622581, from Greg Taeger
Mark Doliner <markdoliner@pidgin.im>
parents: 16129
diff changeset
423 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
424 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
425
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
426 pidgin_status_editor_show(FALSE,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
427 purple_savedstatus_is_transient(saved_status) ? saved_status : NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
428 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
429
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
430 static PurpleSavedStatus *
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
431 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
432 {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
433 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
434
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
435 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
436 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
437 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
438 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
439 (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
440 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
441 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
442 }
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 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
445 }
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 static void
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
448 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
449 {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
450 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
451 PurpleStatusPrimitive primitive;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
452 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
453 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
454 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
455
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
456 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
457 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
458
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
459 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
460 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
461 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
462 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
463 {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
464 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
465 /* 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
466 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
467 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
468 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
469 if (sub) {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
470 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
471 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
472 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
473 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
474 found = TRUE;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
475 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
476 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
477 if (!found)
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
478 continue;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
479 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
480 break;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
481 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
482 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
483
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
484 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
485
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
486 /* 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
487 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
488 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
489
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
490 /* 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
491 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
492 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
493
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
494 static void
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
495 activate_status_primitive_cb(GtkMenuItem *menuitem, gpointer user_data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
496 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
497 PurpleStatusPrimitive primitive;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
498 PurpleSavedStatus *saved_status;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
499
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
500 primitive = GPOINTER_TO_INT(user_data);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
501
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
502 /* Try to lookup an already existing transient saved status */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
503 saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
504
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
505 /* Create a new transient saved status if we weren't able to find one */
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
506 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
507 saved_status = create_transient_status(primitive, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
508
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
509 /* Set the status for each account */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
510 purple_savedstatus_activate(saved_status);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
511 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
512
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
513 static void
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
514 activate_saved_status_cb(GtkMenuItem *menuitem, gpointer user_data)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
515 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
516 time_t creation_time;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
517 PurpleSavedStatus *saved_status;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
518
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
519 creation_time = GPOINTER_TO_INT(user_data);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
520 saved_status = purple_savedstatus_find_by_creation_time(creation_time);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
521 if (saved_status != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
522 purple_savedstatus_activate(saved_status);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
523 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
524
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
525 static GtkWidget *
26821
ad2ea323d0f2 Replace the deprecated GtkSignalFunc and GTK_SIGNAL_FUNC with GCallback and
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25585
diff changeset
526 new_menu_item_with_status_icon(GtkWidget *menu, const char *str, PurpleStatusPrimitive primitive, GCallback cb, gpointer data, guint accel_key, guint accel_mods, char *mod)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
527 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
528 GtkWidget *menuitem;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
529 GdkPixbuf *pixbuf;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
530 GtkWidget *image;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
531
20953
e39a56e1b461 Patch from QuLogic to not use underscores in saved-statuses as mnemonics
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20380
diff changeset
532 menuitem = gtk_image_menu_item_new_with_label(str);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
533
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
534 if (menu)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
535 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
536
26821
ad2ea323d0f2 Replace the deprecated GtkSignalFunc and GTK_SIGNAL_FUNC with GCallback and
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25585
diff changeset
537 if (cb)
ad2ea323d0f2 Replace the deprecated GtkSignalFunc and GTK_SIGNAL_FUNC with GCallback and
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25585
diff changeset
538 g_signal_connect(G_OBJECT(menuitem), "activate", cb, data);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
539
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15766
diff changeset
540 pixbuf = pidgin_create_status_icon(primitive, menu, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
541 image = gtk_image_new_from_pixbuf(pixbuf);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
542 g_object_unref(pixbuf);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
543 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
544
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
545 gtk_widget_show_all(menuitem);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
546
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
547 return menuitem;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
548 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
549
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
550 static void
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
551 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
552 {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
553 GList *l;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
554
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
555 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
556 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
557 PurpleStatusPrimitive prim;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
558
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
559 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
560 continue;
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
561
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
562 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
563
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
564 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
565 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
566 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
567 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
568 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
569 }
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
570
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
571 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
572 docklet_status_submenu(void)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
573 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
574 GtkWidget *submenu, *menuitem;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
575 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
576 PidginStatusBox *statusbox = NULL;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
577
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
578 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
579 menuitem = gtk_menu_item_new_with_mnemonic(_("_Change Status"));
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
580 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
581
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
582 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
583 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
584 }
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
585
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
586 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
587 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
588 } 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
589 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
590 } else {
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
591 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
592 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
593 GINT_TO_POINTER(PURPLE_STATUS_AVAILABLE), 0, 0, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
594
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
595 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
596 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
597 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
598
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
599 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
600 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
601 GINT_TO_POINTER(PURPLE_STATUS_UNAVAILABLE), 0, 0, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
602
21011
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
603 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
604 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
605 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
606
0b21b3224a68 Make sure that the "Change Status" submenu in the docklet context menu
Casey Harkins <charkins@pidgin.im>
parents: 20960
diff changeset
607 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
608 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
609 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
610 }
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
611
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
612 popular_statuses = purple_savedstatuses_get_popular(6);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
613 if (popular_statuses != NULL)
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
614 pidgin_separator(submenu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
615 for (cur = popular_statuses; cur != NULL; cur = cur->next)
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
616 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
617 PurpleSavedStatus *saved_status = cur->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
618 time_t creation_time = purple_savedstatus_get_creation_time(saved_status);
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
619 new_menu_item_with_status_icon(submenu,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
620 purple_savedstatus_get_title(saved_status),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
621 purple_savedstatus_get_type(saved_status), G_CALLBACK(activate_saved_status_cb),
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
622 GINT_TO_POINTER(creation_time), 0, 0, NULL);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
623 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
624 g_list_free(popular_statuses);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
625
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
626 pidgin_separator(submenu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
627
16960
6d97980fed84 Telcontar on #pidgin-win32 pointed out that the "New..." and "Saved..."
Casey Harkins <charkins@pidgin.im>
parents: 16918
diff changeset
628 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
629 pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
630
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
631 return menuitem;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
632 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
633
20959
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
634
20960
b0c77b970912 merge of 'e39a56e1b46110397f5043f21bb86f8cd920012d'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20953 20959
diff changeset
635
20959
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
636 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
637 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
638 {
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
639 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
640 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
641 }
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 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
644 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
645 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
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 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
648 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
649 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
650
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
651 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
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 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
654 {
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
655 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
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 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
658 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
659 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
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 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
662 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
663
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
664 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
665 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
666 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
667 action,
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
668 (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
669 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
670 }
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
671 else
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
672 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
673 }
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
674
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
675 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
676 }
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
677
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
678
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
679 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
680 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
681 {
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
682 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
683 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
684 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
685 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
686
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
687 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
688
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
689 /* 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
690 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
691 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
692
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
693 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
694 continue;
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
695
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
696 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
697 continue;
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
698
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
699 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
700 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
701
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
702 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
703 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
704
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
705 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
706
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
707 c++;
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
708 }
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
709 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
710 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
711 }
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
712
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
713 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
714 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
715 {
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
716 static GtkWidget *menu = NULL;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
717 GtkWidget *menuitem;
32339
8c4f6c2f736b Improve win32 behavior of the GtkStatusIcon based docklet.
Daniel Atallah <datallah@pidgin.im>
parents: 32325
diff changeset
718 GtkMenuPositionFunc pos_func = gtk_status_icon_position_menu;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
719
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
720 if (menu) {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
721 gtk_widget_destroy(menu);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
722 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
723
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
724 menu = gtk_menu_new();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
725
23344
edd0045bf715 Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents: 23343
diff changeset
726 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
727 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/list_visible"));
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
728 g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blist), NULL);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
729 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
730
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
731 menuitem = gtk_menu_item_new_with_mnemonic(_("_Unread Messages"));
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
732
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
733 if (pending) {
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
734 GtkWidget *submenu = gtk_menu_new();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
735 GList *l = get_pending_list(0);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
736 if (l == NULL) {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
737 gtk_widget_set_sensitive(menuitem, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
738 purple_debug_warning("docklet",
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
739 "status indicates messages pending, but no conversations with unseen messages were found.");
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
740 } else {
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
741 pidgin_conversations_fill_menu(submenu, l);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
742 g_list_free(l);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
743 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
744 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
745 } else {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
746 gtk_widget_set_sensitive(menuitem, FALSE);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
747 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
748 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
749
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
750 pidgin_separator(menu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
751
23344
edd0045bf715 Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents: 23343
diff changeset
752 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
753 if (status == PURPLE_STATUS_OFFLINE)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
754 gtk_widget_set_sensitive(menuitem, FALSE);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
755
23848
d017d45e3dcf Add menuitem for 'join chat' in the docklet menu. Closes #3623.
Balwinder S Dheeman <bsd@rubyforge.org>
parents: 23344
diff changeset
756 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
757 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
758 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
759 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
760
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
761 menuitem = docklet_status_submenu();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
762 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
763
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
764 pidgin_separator(menu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
765
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
766 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
767 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
768 pidgin_new_item_from_stock(menu, _("Pr_eferences"), GTK_STOCK_PREFERENCES, G_CALLBACK(pidgin_prefs_show), NULL, 0, 0, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
769
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
770 pidgin_separator(menu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
771
23344
edd0045bf715 Changes to the docklet mnemonics patch to make them more consistent with
Richard Laager <rlaager@pidgin.im>
parents: 23343
diff changeset
772 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
773 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
774 if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), "none"))
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
775 gtk_widget_set_sensitive(GTK_WIDGET(menuitem), FALSE);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
776 g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_mute), NULL);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
777 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
778
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
779 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
780 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink"));
14875
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
781 g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blink), NULL);
a5d2eae7dd11 [gaim-migrate @ 17579]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
782 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
783
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15566
diff changeset
784 pidgin_separator(menu);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
785
20959
8ccaaaec1b01 Add plugin actions to the docklet context menu. These are the same actions
Casey Harkins <charkins@pidgin.im>
parents: 20380
diff changeset
786 /* 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
787 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
788
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
789 pidgin_new_item_from_stock(menu, _("_Quit"), GTK_STOCK_QUIT, G_CALLBACK(purple_core_quit), NULL, 0, 0, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
790
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
791 #ifdef _WIN32
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
792 g_signal_connect(menu, "leave-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
793 g_signal_connect(menu, "enter-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL);
32339
8c4f6c2f736b Improve win32 behavior of the GtkStatusIcon based docklet.
Daniel Atallah <datallah@pidgin.im>
parents: 32325
diff changeset
794 pos_func = NULL;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
795 #endif
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
796 gtk_widget_show_all(menu);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
797 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
32339
8c4f6c2f736b Improve win32 behavior of the GtkStatusIcon based docklet.
Daniel Atallah <datallah@pidgin.im>
parents: 32325
diff changeset
798 pos_func,
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
799 docklet, 0, gtk_get_current_event_time());
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
800 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
801
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
802 static void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
803 pidgin_docklet_clicked(int button_type)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
804 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
805 switch (button_type) {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
806 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
807 if (pending) {
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
808 GList *l = get_pending_list(1);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
809 if (l != NULL) {
21022
eb7d727949e7 Handle unattached conversations appropriately when drawing tooltip for
Casey Harkins <charkins@pidgin.im>
parents: 21014
diff changeset
810 pidgin_conv_present_conversation((PurpleConversation *)l->data);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
811 g_list_free(l);
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
812 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
813 } else {
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
814 pidgin_blist_toggle_visibility();
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
815 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
816 break;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
817 case 3:
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
818 docklet_menu();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
819 break;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
820 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
821 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
822
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
823 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
824 pidgin_docklet_embedded(void)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
825 {
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
826 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
827 && 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
828 pidgin_blist_visibility_manager_add();
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
829 visibility_manager = TRUE;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
830 }
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
831 visible = TRUE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
832 docklet_update_status();
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
833 docklet_gtk_status_update_icon(status, connecting, pending);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
834 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
835
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
836 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
837 pidgin_docklet_remove(void)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
838 {
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
839 if (visible) {
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
840 if (visibility_manager) {
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
841 pidgin_blist_visibility_manager_remove();
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
842 visibility_manager = FALSE;
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
843 }
14935
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
844 if (docklet_blinking_timer) {
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
845 g_source_remove(docklet_blinking_timer);
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
846 docklet_blinking_timer = 0;
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14875
diff changeset
847 }
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
848 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
849 status = PURPLE_STATUS_OFFLINE;
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
850 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
851 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
852
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
853 static gboolean
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
854 docklet_gtk_recreate_cb(gpointer data)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
855 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
856 docklet_gtk_status_create(TRUE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
857
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
858 return FALSE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
859 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
860
32341
6b2256808cad I assume this check was backwards, since embedding should be used
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32339
diff changeset
861 #ifndef _WIN32
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
862 static gboolean
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
863 docklet_gtk_embed_timeout_cb(gpointer data)
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
864 {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
865 #if !GTK_CHECK_VERSION(2,12,0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
866 if (gtk_status_icon_is_embedded(docklet)) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
867 /* Older GTK+ (<2.12) don't implement the embedded signal, but the
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
868 information is still accessible through the above function. */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
869 purple_debug_info("docklet", "embedded\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
870
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
871 pidgin_docklet_embedded();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
872 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", TRUE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
873 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
874 else
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
875 #endif
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
876 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
877 /* The docklet was not embedded within the timeout.
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
878 * Remove it as a visibility manager, but leave the plugin
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
879 * loaded so that it can embed automatically if/when a notification
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
880 * area becomes available.
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
881 */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
882 purple_debug_info("docklet", "failed to embed within timeout\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
883 pidgin_docklet_remove();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
884 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
885 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
886
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
887 #if GTK_CHECK_VERSION(2,12,0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
888 embed_timeout = 0;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
889 return FALSE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
890 #else
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
891 return TRUE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
892 #endif
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
893 }
32341
6b2256808cad I assume this check was backwards, since embedding should be used
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32339
diff changeset
894 #endif
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
895
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
896 #if GTK_CHECK_VERSION(2,12,0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
897 static gboolean
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
898 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
899 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
900 if (embed_timeout) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
901 purple_timeout_remove(embed_timeout);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
902 embed_timeout = 0;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
903 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
904
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
905 if (gtk_status_icon_is_embedded(docklet)) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
906 purple_debug_info("docklet", "embedded\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
907
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
908 pidgin_docklet_embedded();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
909 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", TRUE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
910 } else {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
911 purple_debug_info("docklet", "detached\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
912
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
913 pidgin_docklet_remove();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
914 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
915 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
916
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
917 return TRUE;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
918 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
919 #endif
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
920
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
921 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
922 docklet_gtk_destroyed_cb(GtkWidget *widget, gpointer data)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
923 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
924 purple_debug_info("docklet", "destroyed\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
925
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
926 pidgin_docklet_remove();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
927
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
928 g_object_unref(G_OBJECT(docklet));
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
929 docklet = NULL;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
930
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
931 g_idle_add(docklet_gtk_recreate_cb, NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
932 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
933
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
934 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
935 docklet_gtk_status_activated_cb(GtkStatusIcon *status_icon, gpointer user_data)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
936 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
937 pidgin_docklet_clicked(1);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
938 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
939
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
940 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
941 docklet_gtk_status_clicked_cb(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
942 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
943 purple_debug_info("docklet", "The button is %u\n", button);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
944 #ifdef GDK_WINDOWING_QUARTZ
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
945 /* You can only click left mouse button on MacOSX native GTK. Let that be the menu */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
946 pidgin_docklet_clicked(3);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
947 #else
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
948 pidgin_docklet_clicked(button);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
949 #endif
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
950 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
951
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
952 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
953 docklet_gtk_status_destroy(void)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
954 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
955 g_return_if_fail(docklet != NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
956
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
957 pidgin_docklet_remove();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
958
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
959 if (embed_timeout) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
960 purple_timeout_remove(embed_timeout);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
961 embed_timeout = 0;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
962 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
963
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
964 gtk_status_icon_set_visible(docklet, FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
965 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_gtk_destroyed_cb), NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
966 g_object_unref(G_OBJECT(docklet));
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
967 docklet = NULL;
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
968
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
969 purple_debug_info("docklet", "GTK+ destroyed\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
970 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
971
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
972 static void
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
973 docklet_gtk_status_create(gboolean recreate)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
974 {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
975 if (docklet) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
976 /* if this is being called when a tray icon exists, it's because
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
977 something messed up. try destroying it before we proceed,
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
978 although docklet_refcount may be all hosed. hopefully won't happen. */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
979 purple_debug_warning("docklet", "trying to create icon but it already exists?\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
980 docklet_gtk_status_destroy();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
981 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
982
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
983 docklet = gtk_status_icon_new();
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
984 g_return_if_fail(docklet != NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
985
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
986 g_signal_connect(G_OBJECT(docklet), "activate", G_CALLBACK(docklet_gtk_status_activated_cb), NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
987 g_signal_connect(G_OBJECT(docklet), "popup-menu", G_CALLBACK(docklet_gtk_status_clicked_cb), NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
988 #if GTK_CHECK_VERSION(2,12,0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
989 g_signal_connect(G_OBJECT(docklet), "notify::embedded", G_CALLBACK(docklet_gtk_embedded_cb), NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
990 #endif
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
991 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_gtk_destroyed_cb), NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
992
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
993 gtk_status_icon_set_visible(docklet, TRUE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
994
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
995 /* This is a hack to avoid a race condition between the docklet getting
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
996 * embedded in the notification area and the gtkblist restoring its
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
997 * previous visibility state. If the docklet does not get embedded within
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
998 * the timeout, it will be removed as a visibility manager until it does
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
999 * get embedded. Ideally, we would only call docklet_embedded() when the
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1000 * icon was actually embedded. This only happens when the docklet is first
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1001 * created, not when being recreated.
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1002 *
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1003 * The gtk docklet tracks whether it successfully embedded in a pref and
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1004 * allows for a longer timeout period if it successfully embedded the last
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1005 * time it was run. This should hopefully solve problems with the buddy
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1006 * list not properly starting hidden when Pidgin is started on login.
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1007 */
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1008 if (!recreate) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1009 pidgin_docklet_embedded();
32341
6b2256808cad I assume this check was backwards, since embedding should be used
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32339
diff changeset
1010 #ifndef _WIN32
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1011 #if GTK_CHECK_VERSION(2,12,0)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1012 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1013 embed_timeout = purple_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1014 } else {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1015 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1016 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1017 #else
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1018 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1019 #endif
32339
8c4f6c2f736b Improve win32 behavior of the GtkStatusIcon based docklet.
Daniel Atallah <datallah@pidgin.im>
parents: 32325
diff changeset
1020 #endif
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1021 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1022
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1023 purple_debug_info("docklet", "GTK+ created\n");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1024 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1025
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1026 /**************************************************************************
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1027 * public api
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1028 **************************************************************************/
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1029
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1030 void*
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1031 pidgin_docklet_get_handle()
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1032 {
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1033 static int i;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1034 return &i;
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1035 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1036
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
1037 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1038 pidgin_docklet_init()
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1039 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1040 void *conn_handle = purple_connections_get_handle();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1041 void *conv_handle = purple_conversations_get_handle();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1042 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
1043 void *status_handle = purple_savedstatuses_get_handle();
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1044 void *docklet_handle = pidgin_docklet_get_handle();
32325
f6980ed6044a Fix win32 build for gtkdocklet changes.
Daniel Atallah <datallah@pidgin.im>
parents: 32307
diff changeset
1045 gchar *tmp;
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
1046
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
1047 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
1048 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
1049 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
1050 purple_prefs_connect_callback(docklet_handle, PIDGIN_PREFS_ROOT "/docklet/show",
14947
3d4554cea133 [gaim-migrate @ 17654]
Sean Egan <seanegan@pidgin.im>
parents: 14935
diff changeset
1051 docklet_show_pref_changed_cb, NULL);
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1052
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1053 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet/gtk");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1054 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded")) {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1055 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", TRUE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1056 purple_prefs_remove(PIDGIN_PREFS_ROOT "/docklet/x11/embedded");
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1057 } else {
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1058 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1059 }
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1060
32325
f6980ed6044a Fix win32 build for gtkdocklet changes.
Daniel Atallah <datallah@pidgin.im>
parents: 32307
diff changeset
1061 tmp = g_build_path(G_DIR_SEPARATOR_S, DATADIR, "pixmaps", "pidgin", "tray", NULL);
f6980ed6044a Fix win32 build for gtkdocklet changes.
Daniel Atallah <datallah@pidgin.im>
parents: 32307
diff changeset
1062 gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), tmp);
f6980ed6044a Fix win32 build for gtkdocklet changes.
Daniel Atallah <datallah@pidgin.im>
parents: 32307
diff changeset
1063 g_free(tmp);
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1064
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1065 if (!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/docklet/show"), "always"))
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1066 docklet_gtk_status_create(FALSE);
15077
38a44f14dd35 [gaim-migrate @ 17797]
Daniel Atallah <datallah@pidgin.im>
parents: 15075
diff changeset
1067
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1068 purple_signal_connect(conn_handle, "signed-on",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1069 docklet_handle, PURPLE_CALLBACK(docklet_signed_on_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1070 purple_signal_connect(conn_handle, "signed-off",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1071 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
1072 purple_signal_connect(accounts_handle, "account-connecting",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1073 docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1074 purple_signal_connect(conv_handle, "received-im-msg",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1075 docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1076 purple_signal_connect(conv_handle, "conversation-created",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1077 docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1078 purple_signal_connect(conv_handle, "deleting-conversation",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1079 docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1080 purple_signal_connect(conv_handle, "conversation-updated",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1081 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
1082 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
1083 docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
1084 #if 0
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1085 purple_signal_connect(purple_get_core(), "quitting",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1086 docklet_handle, PURPLE_CALLBACK(purple_quit_cb), NULL);
14745
d43256e1e6fd [gaim-migrate @ 17435]
Daniel Atallah <datallah@pidgin.im>
parents: 14743
diff changeset
1087 #endif
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1088
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1089 enable_join_chat = online_account_supports_chat();
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1090 }
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1091
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1092 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1093 pidgin_docklet_uninit()
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1094 {
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1095 if (visible)
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1096 docklet_gtk_status_destroy();
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1097 }
32307
bef14ba3eda1 Remove GtkDocklet abstraction and merge GtkStatusIcon code into it.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32213
diff changeset
1098

mercurial