Mon, 12 Dec 2005 20:38:10 +0000
[gaim-migrate @ 14782]
SF Patch #1373967 from charkins
"This patch requires #1372898 to be applied first. It
adds two 3-way preferences to the docklet plugin to
determine when the tray icon should blink. One pref is
for unread IM messages, the other for unread chat
messages. The options for each:
im: never, when hidden, always
chat: never, when nick said, always
I've set the defaults to match the 1.x behavior (when
hidden for im, never for chat)."
This patch provided a function used by a previous patch. I undid my (now incorrect) changes there. I modified this to have a limit to the number of tooltips to display. I also tweaked the preference strings a bit. So, blame me if those things are wrong. ;)
committer: Richard Laager <rlaager@pidgin.im>
| 6209 | 1 | /* |
| 2 | * System tray icon (aka docklet) plugin for Gaim | |
| 3 | * | |
| 4 | * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org> | |
| 5 | * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com> | |
| 6 | * Inspired by a similar plugin by: | |
| 7 | * John (J5) Palmieri <johnp@martianrock.com> | |
| 8 | * | |
| 9 | * This program is free software; you can redistribute it and/or | |
| 10 | * modify it under the terms of the GNU General Public License as | |
| 11 | * published by the Free Software Foundation; either version 2 of the | |
| 12 | * License, or (at your option) any later version. | |
| 13 | * | |
| 14 | * This program is distributed in the hope that it will be useful, but | |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 17 | * General Public License for more details. | |
| 18 | * | |
| 19 | * You should have received a copy of the GNU General Public License | |
| 20 | * along with this program; if not, write to the Free Software | |
| 21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
| 22 | * 02111-1307, USA. | |
| 23 | */ | |
| 24 | ||
| 25 | #include "internal.h" | |
| 9791 | 26 | #include "gtkgaim.h" |
| 6209 | 27 | #include "debug.h" |
|
10297
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10268
diff
changeset
|
28 | #include "gtkstock.h" |
| 6209 | 29 | |
| 30 | #include "gaim.h" | |
|
9709
2e73f176cc80
[gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents:
9229
diff
changeset
|
31 | #include "gtkdialogs.h" |
| 6209 | 32 | |
| 33 | #include "eggtrayicon.h" | |
| 34 | #include "docklet.h" | |
| 35 | ||
|
11631
622bca9bfe33
[gaim-migrate @ 13907]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10771
diff
changeset
|
36 | #define EMBED_TIMEOUT 10000 |
| 10491 | 37 | |
| 6209 | 38 | /* globals */ |
| 39 | static EggTrayIcon *docklet = NULL; | |
| 40 | static GtkWidget *image = NULL; | |
|
12471
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
41 | static GtkTooltips *tooltips = NULL; |
|
6894
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
42 | static GdkPixbuf *blank_icon = NULL; |
| 10491 | 43 | static int embed_timeout = 0; |
| 6209 | 44 | |
| 45 | /* protos */ | |
|
12397
aa64ec827fdf
[gaim-migrate @ 14704]
Richard Laager <rlaager@pidgin.im>
parents:
12026
diff
changeset
|
46 | static void docklet_x11_create(void); |
| 6209 | 47 | |
| 48 | static gboolean | |
| 49 | docklet_x11_create_cb() | |
| 50 | { | |
| 51 | docklet_x11_create(); | |
| 52 | ||
| 53 | return FALSE; /* for when we're called by the glib idle handler */ | |
| 54 | } | |
| 55 | ||
| 56 | static void | |
| 57 | docklet_x11_embedded_cb(GtkWidget *widget, void *data) | |
| 58 | { | |
| 59 | gaim_debug(GAIM_DEBUG_INFO, "tray icon", "embedded\n"); | |
| 10491 | 60 | |
| 61 | g_source_remove(embed_timeout); | |
| 62 | embed_timeout = 0; | |
| 6209 | 63 | } |
| 64 | ||
| 65 | static void | |
| 66 | docklet_x11_destroyed_cb(GtkWidget *widget, void *data) | |
| 67 | { | |
| 68 | gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); | |
| 69 | ||
| 70 | docklet_remove(TRUE); | |
| 71 | ||
| 72 | g_object_unref(G_OBJECT(docklet)); | |
| 73 | docklet = NULL; | |
| 74 | ||
| 75 | g_idle_add(docklet_x11_create_cb, &handle); | |
| 76 | } | |
| 77 | ||
| 78 | static void | |
| 79 | docklet_x11_clicked_cb(GtkWidget *button, GdkEventButton *event, void *data) | |
| 80 | { | |
| 81 | if (event->type != GDK_BUTTON_PRESS) | |
| 82 | return; | |
| 83 | ||
| 84 | docklet_clicked(event->button); | |
| 85 | } | |
| 86 | ||
| 87 | static void | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
88 | docklet_x11_update_icon(DockletStatus icon) |
| 6209 | 89 | { |
| 90 | const gchar *icon_name = NULL; | |
| 91 | ||
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
92 | g_return_if_fail(image != NULL); |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
93 | |
| 6209 | 94 | switch (icon) { |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
95 | case DOCKLET_STATUS_OFFLINE: |
| 6209 | 96 | icon_name = GAIM_STOCK_ICON_OFFLINE; |
| 97 | break; | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
98 | case DOCKLET_STATUS_CONNECTING: |
| 6209 | 99 | icon_name = GAIM_STOCK_ICON_CONNECT; |
| 100 | break; | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
101 | case DOCKLET_STATUS_ONLINE: |
| 6209 | 102 | icon_name = GAIM_STOCK_ICON_ONLINE; |
| 103 | break; | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
104 | case DOCKLET_STATUS_ONLINE_PENDING: |
| 6209 | 105 | icon_name = GAIM_STOCK_ICON_ONLINE_MSG; |
| 106 | break; | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
107 | case DOCKLET_STATUS_AWAY: |
| 6209 | 108 | icon_name = GAIM_STOCK_ICON_AWAY; |
| 109 | break; | |
|
11709
da6e9cd5f6d9
[gaim-migrate @ 14000]
Casey Harkins <charkins@pidgin.im>
parents:
11631
diff
changeset
|
110 | case DOCKLET_STATUS_AWAY_PENDING: |
| 6209 | 111 | icon_name = GAIM_STOCK_ICON_AWAY_MSG; |
| 112 | break; | |
| 113 | } | |
| 114 | ||
| 10771 | 115 | gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); |
| 116 | ||
| 10766 | 117 | #if 0 |
| 118 | GdkPixbuf *p; | |
| 119 | GdkBitmap *mask = NULL; | |
| 120 | ||
| 10765 | 121 | p = gtk_widget_render_icon(GTK_WIDGET(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); |
| 122 | ||
| 123 | if (p && (gdk_pixbuf_get_colorspace(p) == GDK_COLORSPACE_RGB) && (gdk_pixbuf_get_bits_per_sample(p) == 8) | |
| 124 | && (gdk_pixbuf_get_has_alpha(p)) && (gdk_pixbuf_get_n_channels(p) == 4)) { | |
| 125 | int len = gdk_pixbuf_get_width(p) * gdk_pixbuf_get_height(p); | |
| 126 | guchar *data = gdk_pixbuf_get_pixels(p); | |
| 127 | guchar *bitmap = g_malloc((len / 8) + 1); | |
| 128 | int i; | |
| 129 | ||
| 130 | for (i = 0; i < len; i++) | |
| 10766 | 131 | if (data[i*4 + 3] > 55) |
| 10765 | 132 | bitmap[i/8] |= 1 << i % 8; |
| 133 | else | |
| 134 | bitmap[i/8] &= ~(1 << i % 8); | |
| 135 | ||
| 136 | mask = gdk_bitmap_create_from_data(GDK_DRAWABLE(GTK_WIDGET(image)->window), bitmap, gdk_pixbuf_get_width(p), gdk_pixbuf_get_height(p)); | |
| 137 | g_free(bitmap); | |
| 138 | } | |
| 139 | ||
| 140 | if (mask) | |
| 141 | gdk_window_shape_combine_mask(image->window, mask, 0, 0); | |
| 142 | ||
| 143 | g_object_unref(G_OBJECT(p)); | |
| 10766 | 144 | #endif |
| 6209 | 145 | } |
| 146 | ||
| 147 | static void | |
|
6894
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
148 | docklet_x11_blank_icon() |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
149 | { |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
150 | if (!blank_icon) { |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
151 | gint width, height; |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
152 | |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
153 | gtk_icon_size_lookup(GTK_ICON_SIZE_LARGE_TOOLBAR, &width, &height); |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
154 | 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
|
155 | gdk_pixbuf_fill(blank_icon, 0); |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
156 | } |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
157 | |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
158 | gtk_image_set_from_pixbuf(GTK_IMAGE(image), blank_icon); |
|
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 | |
|
12471
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
161 | static void |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
162 | docklet_x11_set_tooltip(gchar *tooltip) |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
163 | { |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
164 | if (!tooltips) |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
165 | tooltips = gtk_tooltips_new(); |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
166 | |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
167 | /* image->parent is a GtkEventBox */ |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
168 | if (tooltip) { |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
169 | gtk_tooltips_enable(tooltips); |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
170 | gtk_tooltips_set_tip(tooltips, image->parent, tooltip, NULL); |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
171 | } else { |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
172 | gtk_tooltips_set_tip(tooltips, image->parent, "", NULL); |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
173 | gtk_tooltips_disable(tooltips); |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
174 | } |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
175 | } |
|
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
176 | |
|
10505
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
177 | #if GTK_CHECK_VERSION(2,2,0) |
|
6894
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
178 | static void |
|
10268
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
179 | 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
|
180 | gpointer user_data) |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
181 | { |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
182 | GtkWidget *widget = GTK_WIDGET(docklet); |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
183 | GtkRequisition req; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
184 | gint menu_xpos, menu_ypos; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
185 | |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
186 | gtk_widget_size_request(GTK_WIDGET(menu), &req); |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
187 | gdk_window_get_origin(widget->window, &menu_xpos, &menu_ypos); |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
188 | |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
189 | menu_xpos += widget->allocation.x; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
190 | menu_ypos += widget->allocation.y; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
191 | |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
192 | 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
|
193 | menu_ypos -= req.height; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
194 | else |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
195 | menu_ypos += widget->allocation.height; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
196 | |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
197 | *x = menu_xpos; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
198 | *y = menu_ypos; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
199 | |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
200 | *push_in = TRUE; |
|
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
201 | } |
|
10505
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
202 | #endif |
|
10268
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
203 | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
204 | static void |
| 6209 | 205 | docklet_x11_destroy() |
| 206 | { | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
207 | g_return_if_fail(docklet != NULL); |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
208 | |
| 6209 | 209 | docklet_remove(GTK_WIDGET_VISIBLE(docklet)); |
| 210 | ||
| 211 | g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL); | |
| 212 | gtk_widget_destroy(GTK_WIDGET(docklet)); | |
| 213 | ||
| 214 | g_object_unref(G_OBJECT(docklet)); | |
| 215 | docklet = NULL; | |
| 216 | ||
|
6894
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
217 | if (blank_icon) |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
218 | g_object_unref(G_OBJECT(blank_icon)); |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
219 | blank_icon = NULL; |
|
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
220 | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
221 | image = NULL; |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
222 | |
| 6209 | 223 | gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
224 | } |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
225 | |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
226 | static gboolean |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
227 | docklet_x11_embed_timeout_cb() |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
228 | { |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
229 | docklet_unload(); |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
230 | |
| 10491 | 231 | return FALSE; |
| 6209 | 232 | } |
| 233 | ||
| 234 | static void | |
| 235 | docklet_x11_create() | |
| 236 | { | |
| 237 | GtkWidget *box; | |
| 238 | ||
| 239 | if (docklet) { | |
| 240 | /* if this is being called when a tray icon exists, it's because | |
| 241 | something messed up. try destroying it before we proceed, | |
| 242 | although docklet_refcount may be all hosed. hopefully won't happen. */ | |
| 243 | gaim_debug(GAIM_DEBUG_WARNING, "tray icon", "trying to create icon but it already exists?\n"); | |
| 244 | docklet_x11_destroy(); | |
| 245 | } | |
| 246 | ||
| 247 | docklet = egg_tray_icon_new("Gaim"); | |
| 248 | box = gtk_event_box_new(); | |
| 249 | image = gtk_image_new(); | |
| 250 | ||
| 251 | g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL); | |
| 252 | g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL); | |
| 253 | g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_x11_clicked_cb), NULL); | |
| 254 | ||
| 255 | gtk_container_add(GTK_CONTAINER(box), image); | |
| 256 | gtk_container_add(GTK_CONTAINER(docklet), box); | |
| 9229 | 257 | |
|
12471
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
258 | if (!gtk_check_version(2,4,0)) |
| 9229 | 259 | g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL); |
| 260 | ||
| 6209 | 261 | gtk_widget_show_all(GTK_WIDGET(docklet)); |
| 262 | ||
| 263 | /* ref the docklet before we bandy it about the place */ | |
| 264 | g_object_ref(G_OBJECT(docklet)); | |
| 10491 | 265 | docklet_embedded(); |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10491
diff
changeset
|
266 | embed_timeout = g_timeout_add(EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL); |
| 6209 | 267 | |
| 268 | gaim_debug(GAIM_DEBUG_INFO, "tray icon", "created\n"); | |
| 269 | } | |
| 270 | ||
| 271 | static struct docklet_ui_ops ui_ops = | |
| 272 | { | |
| 273 | docklet_x11_create, | |
| 274 | docklet_x11_destroy, | |
|
6894
8c6e286b079d
[gaim-migrate @ 7441]
Herman Bloggs <herman@bluedigits.com>
parents:
6371
diff
changeset
|
275 | docklet_x11_update_icon, |
|
10268
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
276 | docklet_x11_blank_icon, |
|
12471
5d7c12d525ed
[gaim-migrate @ 14781]
Casey Harkins <charkins@pidgin.im>
parents:
12397
diff
changeset
|
277 | docklet_x11_set_tooltip, |
|
10505
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
278 | #if GTK_CHECK_VERSION(2,2,0) |
|
10268
862ed5d3f227
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
279 | docklet_x11_position_menu |
|
10505
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
280 | #else |
|
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
281 | NULL |
|
4c063ce8ed62
[gaim-migrate @ 11799]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
282 | #endif |
| 6209 | 283 | }; |
| 284 | ||
| 285 | void | |
| 286 | docklet_ui_init() | |
| 287 | { | |
| 288 | docklet_set_ui_ops(&ui_ops); | |
| 289 | } |