pidgin/gtkdocklet-x11.c

Sun, 28 Oct 2007 18:13:50 +0000

author
Casey Harkins <charkins@pidgin.im>
date
Sun, 28 Oct 2007 18:13:50 +0000
changeset 21113
09118de8bda6
parent 19859
71d37b57eff2
child 20961
f69b1356bb55
permissions
-rw-r--r--

Track the actual visibility for the buddy list (unobscured, partially and
fully obscured). This maintains the behavior from the previous commit
(raising partially obscured buddy list instead of hiding), but also
maintains refreshing of the buddy list when partially obscured which the
previous commit broke.

6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
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
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
3 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
4 * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
5 * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
6 * Inspired by a similar plugin by:
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
7 * John (J5) Palmieri <johnp@martianrock.com>
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
8 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
10 * modify it under the terms of the GNU General Public License as
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
11 * published by the Free Software Foundation; either version 2 of the
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
12 * License, or (at your option) any later version.
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
13 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
17 * General Public License for more details.
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
18 *
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
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: 17756
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: 17756
diff changeset
22 * 02111-1301, USA.
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
23 */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
24
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
25 #include "internal.h"
15577
b8129373f65e More pidgin changes
Sean Egan <seanegan@pidgin.im>
parents: 15570
diff changeset
26 #include "pidgin.h"
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
27 #include "debug.h"
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
28 #include "prefs.h"
15883
969b74a3e27a According to etags, pidgin/ should be completely clean of references to 'gaim' as a client
Sean Egan <seanegan@pidgin.im>
parents: 15836
diff changeset
29 #include "pidginstock.h"
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
30
9709
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9229
diff changeset
31 #include "gtkdialogs.h"
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
32
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
33 #include "eggtrayicon.h"
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents: 14253
diff changeset
34 #include "gtkdocklet.h"
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
35
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
36 #define SHORT_EMBED_TIMEOUT 5000
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
37 #define LONG_EMBED_TIMEOUT 15000
10491
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
38
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
39 /* globals */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
40 static EggTrayIcon *docklet = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
41 static GtkWidget *image = NULL;
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
42 static GtkTooltips *tooltips = NULL;
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
43 static GdkPixbuf *blank_icon = NULL;
10491
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
44 static int embed_timeout = 0;
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
45 static int docklet_height = 0;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
46
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
47 /* protos */
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
48 static void docklet_x11_create(gboolean);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
49
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
50 static gboolean
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
51 docklet_x11_recreate_cb()
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
52 {
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
53 docklet_x11_create(TRUE);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
54
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
55 return FALSE; /* for when we're called by the glib idle handler */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
56 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
57
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
58 static void
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
59 docklet_x11_embedded_cb(GtkWidget *widget, void *data)
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
60 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
61 purple_debug(PURPLE_DEBUG_INFO, "docklet", "embedded\n");
10491
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
62
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
63 g_source_remove(embed_timeout);
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
64 embed_timeout = 0;
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
65 pidgin_docklet_embedded();
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
66 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
67 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
68
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
69 static void
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
70 docklet_x11_destroyed_cb(GtkWidget *widget, void *data)
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
71 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
72 purple_debug(PURPLE_DEBUG_INFO, "docklet", "destroyed\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
73
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
74 pidgin_docklet_remove();
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
75
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
76 g_object_unref(G_OBJECT(docklet));
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
77 docklet = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
78
16628
8fc264ea344f Charkins renamed the callback function, but missed the g_idle_add
Kevin Stange <kstange@pidgin.im>
parents: 16621
diff changeset
79 g_idle_add(docklet_x11_recreate_cb, NULL);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
80 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
81
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
82 static void
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
83 docklet_x11_clicked_cb(GtkWidget *button, GdkEventButton *event, void *data)
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
84 {
15109
2c5f1d3e8db7 [gaim-migrate @ 17831]
Sean Egan <seanegan@pidgin.im>
parents: 15027
diff changeset
85 if (event->type != GDK_BUTTON_RELEASE)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
86 return;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
87
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
88 pidgin_docklet_clicked(event->button);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
89 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
90
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
91 static void
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
92 docklet_x11_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
93 {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
94 const gchar *icon_name = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
95
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
96 g_return_if_fail(image != NULL);
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
97
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
98 switch (status) {
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
99 case PURPLE_STATUS_OFFLINE:
15731
3819e5d5eeae docklet update
Sean Egan <seanegan@pidgin.im>
parents: 15577
diff changeset
100 icon_name = PIDGIN_STOCK_TRAY_OFFLINE;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
101 break;
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
102 case PURPLE_STATUS_AWAY:
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
103 icon_name = PIDGIN_STOCK_TRAY_AWAY;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
104 break;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
105 case PURPLE_STATUS_UNAVAILABLE:
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
106 icon_name = PIDGIN_STOCK_TRAY_BUSY;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
107 break;
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
108 case PURPLE_STATUS_EXTENDED_AWAY:
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
109 icon_name = PIDGIN_STOCK_TRAY_XA;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
110 break;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
111 case PURPLE_STATUS_INVISIBLE:
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
112 icon_name = PIDGIN_STOCK_TRAY_INVISIBLE;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
113 break;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
114 default:
15731
3819e5d5eeae docklet update
Sean Egan <seanegan@pidgin.im>
parents: 15577
diff changeset
115 icon_name = PIDGIN_STOCK_TRAY_AVAILABLE;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
116 break;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
117 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
118
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
119 if (pending)
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
120 icon_name = PIDGIN_STOCK_TRAY_PENDING;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
121 if (connecting)
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
122 icon_name = PIDGIN_STOCK_TRAY_CONNECT;
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
123
15834
ba09306a7b0a 16px tray icons. These are used if the tray is shorter than 22px, and in Windows where all tray icons are 16x16. I still need to attach to a resizing signal to make them automatically update when the tray resizes.
Sean Egan <seanegan@pidgin.im>
parents: 15774
diff changeset
124 if(icon_name) {
ba09306a7b0a 16px tray icons. These are used if the tray is shorter than 22px, and in Windows where all tray icons are 16x16. I still need to attach to a resizing signal to make them automatically update when the tray resizes.
Sean Egan <seanegan@pidgin.im>
parents: 15774
diff changeset
125 int icon_size;
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
126 if (docklet_height < 22)
15834
ba09306a7b0a 16px tray icons. These are used if the tray is shorter than 22px, and in Windows where all tray icons are 16x16. I still need to attach to a resizing signal to make them automatically update when the tray resizes.
Sean Egan <seanegan@pidgin.im>
parents: 15774
diff changeset
127 icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
17704
d795d29d11e0 Icon updates from Hylke, including tray icons in 2 more sizes
Sean Egan <seanegan@pidgin.im>
parents: 17645
diff changeset
128 else if (docklet_height < 32)
d795d29d11e0 Icon updates from Hylke, including tray icons in 2 more sizes
Sean Egan <seanegan@pidgin.im>
parents: 17645
diff changeset
129 icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL);
d795d29d11e0 Icon updates from Hylke, including tray icons in 2 more sizes
Sean Egan <seanegan@pidgin.im>
parents: 17645
diff changeset
130 else if (docklet_height < 48)
d795d29d11e0 Icon updates from Hylke, including tray icons in 2 more sizes
Sean Egan <seanegan@pidgin.im>
parents: 17645
diff changeset
131 icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MEDIUM);
15834
ba09306a7b0a 16px tray icons. These are used if the tray is shorter than 22px, and in Windows where all tray icons are 16x16. I still need to attach to a resizing signal to make them automatically update when the tray resizes.
Sean Egan <seanegan@pidgin.im>
parents: 15774
diff changeset
132 else
17704
d795d29d11e0 Icon updates from Hylke, including tray icons in 2 more sizes
Sean Egan <seanegan@pidgin.im>
parents: 17645
diff changeset
133 icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_LARGE);
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
134
15834
ba09306a7b0a 16px tray icons. These are used if the tray is shorter than 22px, and in Windows where all tray icons are 16x16. I still need to attach to a resizing signal to make them automatically update when the tray resizes.
Sean Egan <seanegan@pidgin.im>
parents: 15774
diff changeset
135 gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, icon_size);
10765
aca333747801 [gaim-migrate @ 12370]
Tim Ringenbach <marv@pidgin.im>
parents: 10574
diff changeset
136 }
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
137 }
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
138
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
139 static void
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
140 docklet_x11_resize_icon(GtkWidget *widget)
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
141 {
17756
0eb3eae720fb Instead of sizing the docklet icon to the height available, size it to the minimum of the height or width. Fixes #1721 in which the icon may get cut off in vertically aligned panels
Sean Egan <seanegan@pidgin.im>
parents: 17704
diff changeset
142 if (docklet_height == MIN(widget->allocation.height, widget->allocation.width))
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
143 return;
17756
0eb3eae720fb Instead of sizing the docklet icon to the height available, size it to the minimum of the height or width. Fixes #1721 in which the icon may get cut off in vertically aligned panels
Sean Egan <seanegan@pidgin.im>
parents: 17704
diff changeset
144 docklet_height = MIN(widget->allocation.height, widget->allocation.width);
16996
749cb2af2e40 Now that the docklet icon is based on the status from status selector, it
Casey Harkins <charkins@pidgin.im>
parents: 16808
diff changeset
145 pidgin_docklet_update_icon();
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
146 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
147
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
148 static void
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
149 docklet_x11_blank_icon()
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
150 {
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
151 if (!blank_icon) {
16422
2a36f5d04f5b Make sure the blinking docklet has the same size. Fixes #174.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
152 GtkIconSize size = GTK_ICON_SIZE_LARGE_TOOLBAR;
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
153 gint width, height;
16422
2a36f5d04f5b Make sure the blinking docklet has the same size. Fixes #174.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
154 g_object_get(G_OBJECT(image), "icon-size", &size, NULL);
2a36f5d04f5b Make sure the blinking docklet has the same size. Fixes #174.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
155 gtk_icon_size_lookup(size, &width, &height);
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
156 blank_icon = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height);
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
157 gdk_pixbuf_fill(blank_icon, 0);
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
158 }
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
159
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
160 gtk_image_set_from_pixbuf(GTK_IMAGE(image), blank_icon);
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
161 }
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
162
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
163 static void
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
164 docklet_x11_set_tooltip(gchar *tooltip)
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
165 {
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
166 if (!tooltips)
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
167 tooltips = gtk_tooltips_new();
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
168
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
169 /* image->parent is a GtkEventBox */
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
170 if (tooltip) {
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
171 gtk_tooltips_enable(tooltips);
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
172 gtk_tooltips_set_tip(tooltips, image->parent, tooltip, NULL);
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
173 } else {
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
174 gtk_tooltips_set_tip(tooltips, image->parent, "", NULL);
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
175 gtk_tooltips_disable(tooltips);
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
176 }
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
177 }
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
178
10505
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
179 #if GTK_CHECK_VERSION(2,2,0)
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
180 static void
10268
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
181 docklet_x11_position_menu(GtkMenu *menu, int *x, int *y, gboolean *push_in,
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
182 gpointer user_data)
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
183 {
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
184 GtkWidget *widget = GTK_WIDGET(docklet);
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
185 GtkRequisition req;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
186 gint menu_xpos, menu_ypos;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
187
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
188 gtk_widget_size_request(GTK_WIDGET(menu), &req);
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
189 gdk_window_get_origin(widget->window, &menu_xpos, &menu_ypos);
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
190
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
191 menu_xpos += widget->allocation.x;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
192 menu_ypos += widget->allocation.y;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
193
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
194 if (menu_ypos > gdk_screen_get_height(gtk_widget_get_screen(widget)) / 2)
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
195 menu_ypos -= req.height;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
196 else
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
197 menu_ypos += widget->allocation.height;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
198
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
199 *x = menu_xpos;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
200 *y = menu_ypos;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
201
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
202 *push_in = TRUE;
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
203 }
10505
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
204 #endif
10268
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
205
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
206 static void
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
207 docklet_x11_destroy()
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
208 {
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
209 g_return_if_fail(docklet != NULL);
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
210
14935
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
211 if (embed_timeout)
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
212 g_source_remove(embed_timeout);
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
213
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
214 pidgin_docklet_remove();
14935
9a69bd67236d [gaim-migrate @ 17642]
Sean Egan <seanegan@pidgin.im>
parents: 14813
diff changeset
215
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
216 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL);
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
217 gtk_widget_destroy(GTK_WIDGET(docklet));
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
218
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
219 g_object_unref(G_OBJECT(docklet));
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
220 docklet = NULL;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
221
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
222 if (blank_icon)
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
223 g_object_unref(G_OBJECT(blank_icon));
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
224 blank_icon = NULL;
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
225
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
226 image = NULL;
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
227
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
228 purple_debug(PURPLE_DEBUG_INFO, "docklet", "destroyed\n");
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
229 }
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
230
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
231 static gboolean
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
232 docklet_x11_embed_timeout_cb()
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10491
diff changeset
233 {
12498
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
234 /* The docklet was not embedded within the timeout.
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
235 * Remove it as a visibility manager, but leave the plugin
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
236 * loaded so that it can embed automatically if/when a notification
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
237 * area becomes available.
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
238 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
239 purple_debug_info("docklet", "failed to embed within timeout\n");
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
240 pidgin_docklet_remove();
14743
2324d3eee038 [gaim-migrate @ 17433]
Sean Egan <seanegan@pidgin.im>
parents: 14253
diff changeset
241
10491
d796f5b823d5 [gaim-migrate @ 11781]
Sean Egan <seanegan@pidgin.im>
parents: 10297
diff changeset
242 return FALSE;
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
243 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
244
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
245 static void
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
246 docklet_x11_create(gboolean recreate)
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
247 {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
248 GtkWidget *box;
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
249
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
250 if (docklet) {
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
251 /* if this is being called when a tray icon exists, it's because
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
252 something messed up. try destroying it before we proceed,
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
253 although docklet_refcount may be all hosed. hopefully won't happen. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
254 purple_debug(PURPLE_DEBUG_WARNING, "docklet", "trying to create icon but it already exists?\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
255 docklet_x11_destroy();
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
256 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
257
15499
9550c30eb265 A few non-gettextized strings
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
258 docklet = egg_tray_icon_new(PIDGIN_NAME);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
259 box = gtk_event_box_new();
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
260 image = gtk_image_new();
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
261
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
262 g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL);
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
263 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL);
15836
b9b71b7b73a0 change icon on resize
Sean Egan <seanegan@pidgin.im>
parents: 15835
diff changeset
264 g_signal_connect(G_OBJECT(docklet), "size-allocate", G_CALLBACK(docklet_x11_resize_icon), NULL);
15109
2c5f1d3e8db7 [gaim-migrate @ 17831]
Sean Egan <seanegan@pidgin.im>
parents: 15027
diff changeset
265 g_signal_connect(G_OBJECT(box), "button-release-event", G_CALLBACK(docklet_x11_clicked_cb), NULL);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
266 gtk_container_add(GTK_CONTAINER(box), image);
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
267 gtk_container_add(GTK_CONTAINER(docklet), box);
9229
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 6894
diff changeset
268
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
269 if (!gtk_check_version(2,4,0))
9229
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 6894
diff changeset
270 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL);
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 6894
diff changeset
271
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
272 gtk_widget_show_all(GTK_WIDGET(docklet));
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
273
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
274 /* ref the docklet before we bandy it about the place */
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
275 g_object_ref(G_OBJECT(docklet));
12498
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
276
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
277 /* This is a hack to avoid a race condition between the docklet getting
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
278 * embedded in the notification area and the gtkblist restoring its
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
279 * previous visibility state. If the docklet does not get embedded within
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
280 * the timeout, it will be removed as a visibility manager until it does
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
281 * get embedded. Ideally, we would only call docklet_embedded() when the
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
282 * icon was actually embedded. This only happens when the docklet is first
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
283 * created, not when being recreated.
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
284 *
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
285 * The x11 docklet tracks whether it successfully embedded in a pref and
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
286 * allows for a longer timeout period if it successfully embedded the last
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
287 * time it was run. This should hopefully solve problems with the buddy
17645
32a0fe7965b7 Get rid of 'Gaim' in a few more places
Mark Doliner <markdoliner@pidgin.im>
parents: 16996
diff changeset
288 * list not properly starting hidden when Pidgin is started on login.
12498
93591c1f68f1 [gaim-migrate @ 14810]
Casey Harkins <charkins@pidgin.im>
parents: 12471
diff changeset
289 */
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
290 if(!recreate) {
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
291 pidgin_docklet_embedded();
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
292 if(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded")) {
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
293 embed_timeout = g_timeout_add(LONG_EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL);
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
294 } else {
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
295 embed_timeout = g_timeout_add(SHORT_EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL);
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
296 }
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
297 }
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
298
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
299 purple_debug(PURPLE_DEBUG_INFO, "docklet", "created\n");
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
300 }
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
301
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
302 static void
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
303 docklet_x11_create_ui_op()
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
304 {
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
305 docklet_x11_create(FALSE);
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
306 }
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
307
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
308 static struct docklet_ui_ops ui_ops =
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
309 {
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
310 docklet_x11_create_ui_op,
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
311 docklet_x11_destroy,
6894
8c6e286b079d [gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents: 6371
diff changeset
312 docklet_x11_update_icon,
10268
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
313 docklet_x11_blank_icon,
12471
5d7c12d525ed [gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents: 12397
diff changeset
314 docklet_x11_set_tooltip,
10505
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
315 #if GTK_CHECK_VERSION(2,2,0)
10268
862ed5d3f227 [gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents: 9791
diff changeset
316 docklet_x11_position_menu
10505
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
317 #else
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
318 NULL
4c063ce8ed62 [gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
319 #endif
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
320 };
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
321
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
322 void
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
323 docklet_ui_init()
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
324 {
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15499
diff changeset
325 pidgin_docklet_set_ui_ops(&ui_ops);
16621
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
326 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet/x11");
616dc666cfb8 Quoth Charkins:
Luke Schierer <lschiere@pidgin.im>
parents: 16422
diff changeset
327 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE);
6209
995a43192bb0 [gaim-migrate @ 6695]
Herman Bloggs <herman@bluedigits.com>
parents:
diff changeset
328 }

mercurial