Mercurial > pidgin.yaz
annotate plugins/docklet/docklet.c @ 4250:3b884e35e6b5
[gaim-migrate @ 4500]
The docklet now uses an icon factory. Thanks Robot101.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 08 Jan 2003 08:22:16 +0000 |
parents | 9c31ddae80a1 |
children | e252238f99df |
rev | line source |
---|---|
4093 | 1 /* System tray icon (aka docklet) plugin for Gaim |
3510 | 2 * Copyright (C) 2002 Robert McQueen <robot101@debian.org> |
3 * Inspired by a similar plugin by: | |
4 * John (J5) Palmieri <johnp@martianrock.com> | |
5 * | |
6 * This program is free software; you can redistribute it and/or | |
7 * modify it under the terms of the GNU General Public License as | |
8 * published by the Free Software Foundation; either version 2 of the | |
9 * License, or (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, but | |
12 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
19 * 02111-1307, USA. | |
20 */ | |
21 | |
22 /* todo (in order of importance): | |
4093 | 23 - don't crash when the plugin gets unloaded (may be a libegg bug, |
24 see #101467 in gnome bugzilla) | |
25 - handle and update tooltips to show your current accounts ? | |
3510 | 26 - dernyi's account status menu in the right click |
27 - store icons in gtk2 stock icon thing (needs doing for the whole prog) | |
3554 | 28 - optional pop up notices when GNOME2's system-tray-applet supports it |
29 - support blinking the icon when messages are pending */ | |
3510 | 30 |
31 /* includes */ | |
32 #include <gtk/gtk.h> | |
33 #include "gaim.h" | |
34 #include "eggtrayicon.h" | |
35 | |
3867 | 36 #ifndef GAIM_PLUGINS |
37 #define GAIM_PLUGINS | |
38 #endif | |
39 | |
3510 | 40 /* types */ |
41 enum docklet_status { | |
4157 | 42 offline, |
43 offline_connecting, | |
3510 | 44 online, |
4157 | 45 online_connecting, |
46 online_pending, | |
3510 | 47 away, |
4157 | 48 away_pending |
3510 | 49 }; |
50 | |
51 /* functions */ | |
4093 | 52 static gboolean docklet_create(); |
4157 | 53 static gboolean docklet_update_status(); |
4093 | 54 void gaim_plugin_remove(); |
3510 | 55 |
56 /* globals */ | |
3513 | 57 static EggTrayIcon *docklet = NULL; |
3510 | 58 static GtkWidget *icon; |
59 static enum docklet_status status; | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
60 static GtkIconFactory *icon_factory = NULL; |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
61 static GtkIconSize icon_size; |
3510 | 62 |
3554 | 63 static void docklet_toggle_mute(GtkWidget *toggle, void *data) { |
64 mute_sounds = GTK_CHECK_MENU_ITEM(toggle)->active; | |
3510 | 65 } |
66 | |
3554 | 67 static void docklet_toggle_queue(GtkWidget *widget, void *data) { |
68 away_options ^= OPT_AWAY_QUEUE_UNREAD; | |
69 save_prefs(); | |
3510 | 70 } |
3570 | 71 |
72 /* static void docklet_toggle_blist_show(GtkWidget *widget, void *data) { | |
73 blist_options ^= OPT_BLIST_APP_BUDDY_SHOW; | |
74 save_prefs(); | |
75 } */ | |
76 | |
3554 | 77 static void docklet_flush_queue() { |
3570 | 78 if (unread_message_queue) { |
79 purge_away_queue(unread_message_queue); | |
80 unread_message_queue = NULL; | |
81 } | |
3510 | 82 } |
83 | |
84 static void docklet_menu(GdkEventButton *event) { | |
3513 | 85 static GtkWidget *menu = NULL; |
3512 | 86 GtkWidget *entry; |
3510 | 87 |
88 if (menu) { | |
89 gtk_widget_destroy(menu); | |
90 } | |
91 | |
92 menu = gtk_menu_new(); | |
93 | |
4157 | 94 switch (status) { |
95 case offline: | |
96 case offline_connecting: | |
97 break; | |
98 case online: | |
99 case online_connecting: | |
100 case online_pending: { | |
3510 | 101 GtkWidget *docklet_awaymenu; |
102 GSList *awy = NULL; | |
103 struct away_message *a = NULL; | |
104 | |
105 docklet_awaymenu = gtk_menu_new(); | |
106 awy = away_messages; | |
107 | |
108 while (awy) { | |
109 a = (struct away_message *)awy->data; | |
110 | |
111 entry = gtk_menu_item_new_with_label(a->name); | |
3554 | 112 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(do_away_message), a); |
3510 | 113 gtk_menu_append(GTK_MENU(docklet_awaymenu), entry); |
114 | |
115 awy = g_slist_next(awy); | |
116 } | |
117 | |
4157 | 118 if (away_messages) |
119 gaim_separator(docklet_awaymenu); | |
3510 | 120 |
121 entry = gtk_menu_item_new_with_label(_("New...")); | |
3554 | 122 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(create_away_mess), NULL); |
3510 | 123 gtk_menu_append(GTK_MENU(docklet_awaymenu), entry); |
124 | |
125 entry = gtk_menu_item_new_with_label(_("Away")); | |
3512 | 126 gtk_menu_item_set_submenu(GTK_MENU_ITEM(entry), docklet_awaymenu); |
3510 | 127 gtk_menu_append(GTK_MENU(menu), entry); |
4157 | 128 } break; |
129 case away: | |
130 case away_pending: | |
3510 | 131 entry = gtk_menu_item_new_with_label(_("Back")); |
3554 | 132 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(do_im_back), NULL); |
3510 | 133 gtk_menu_append(GTK_MENU(menu), entry); |
4157 | 134 break; |
3510 | 135 } |
136 | |
4157 | 137 switch (status) { |
138 case offline: | |
139 case offline_connecting: | |
140 entry = gtk_menu_item_new_with_label(_("Auto-login")); | |
141 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(auto_login), NULL); | |
142 gtk_menu_append(GTK_MENU(menu), entry); | |
143 break; | |
144 default: | |
145 entry = gtk_menu_item_new_with_label(_("Signoff")); | |
146 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(signoff_all), NULL); | |
147 gtk_menu_append(GTK_MENU(menu), entry); | |
148 break; | |
149 } | |
150 | |
151 gaim_separator(menu); | |
3510 | 152 |
3517 | 153 entry = gtk_check_menu_item_new_with_label(_("Mute Sounds")); |
154 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), mute_sounds); | |
3554 | 155 g_signal_connect(G_OBJECT(entry), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); |
3517 | 156 gtk_menu_append(GTK_MENU(menu), entry); |
157 | |
4157 | 158 gaim_new_item_from_pixbuf(menu, _("Accounts..."), "accounts-menu.png", G_CALLBACK(account_editor), NULL, 0, 0, 0); |
159 gaim_new_item_from_stock(menu, _("Preferences..."), GTK_STOCK_PREFERENCES, G_CALLBACK(show_prefs), NULL, 0, 0, 0); | |
3510 | 160 |
4157 | 161 gaim_separator(menu); |
3510 | 162 |
4157 | 163 gaim_new_item_from_pixbuf(menu, _("About Gaim..."), "about_menu.png", G_CALLBACK(show_about), NULL, 0, 0, 0); |
164 gaim_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(do_quit), NULL, 0, 0, 0); | |
3510 | 165 |
166 gtk_widget_show_all(menu); | |
167 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); | |
168 } | |
169 | |
170 static void docklet_clicked(GtkWidget *button, GdkEventButton *event, void *data) { | |
3939 | 171 if (event->type != GDK_BUTTON_PRESS) |
172 return; | |
173 | |
3510 | 174 switch (event->button) { |
175 case 1: | |
3517 | 176 if (unread_message_queue) { |
3570 | 177 docklet_flush_queue(); |
3517 | 178 docklet_update_status(); |
3570 | 179 } else { |
3517 | 180 docklet_toggle(); |
3554 | 181 } |
3510 | 182 break; |
183 case 2: | |
184 break; | |
185 case 3: | |
186 docklet_menu(event); | |
187 break; | |
188 } | |
189 } | |
190 | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
191 static void docklet_update_icon() |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
192 { |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
193 const gchar *icon_name = NULL; |
3510 | 194 |
195 switch (status) { | |
4157 | 196 case offline: |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
197 icon_name = "gaim-docklet-offline"; |
4157 | 198 break; |
199 case offline_connecting: | |
200 case online_connecting: | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
201 icon_name = "gaim-docklet-connect"; |
4157 | 202 break; |
3510 | 203 case online: |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
204 icon_name = "gaim-docklet-online"; |
3510 | 205 break; |
4157 | 206 case online_pending: |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
207 icon_name = "gaim-docklet-msgunread"; |
4157 | 208 break; |
3510 | 209 case away: |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
210 icon_name = "gaim-docklet-away"; |
3510 | 211 break; |
212 case away_pending: | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
213 icon_name = "gaim-docklet-msgpend"; |
3510 | 214 break; |
215 } | |
216 | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
217 gtk_image_set_from_stock(GTK_IMAGE(icon), icon_name, icon_size); |
3510 | 218 |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
219 debug_printf("Tray Icon: updated icon to '%s'\n",icon_name); |
3510 | 220 } |
221 | |
4157 | 222 static gboolean docklet_update_status() { |
3510 | 223 enum docklet_status oldstatus; |
224 | |
225 oldstatus = status; | |
226 | |
227 if (connections) { | |
3517 | 228 if (unread_message_queue) { |
4157 | 229 status = online_pending; |
3517 | 230 } else if (awaymessage) { |
3510 | 231 if (message_queue) { |
232 status = away_pending; | |
233 } else { | |
234 status = away; | |
235 } | |
3554 | 236 } else if (connecting_count) { |
4157 | 237 status = online_connecting; |
3510 | 238 } else { |
239 status = online; | |
240 } | |
241 } else { | |
3517 | 242 if (connecting_count) { |
4157 | 243 status = offline_connecting; |
3517 | 244 } else { |
245 status = offline; | |
246 } | |
3510 | 247 } |
248 | |
249 if (status != oldstatus) { | |
250 docklet_update_icon(); | |
251 } | |
4157 | 252 |
253 return FALSE; /* for when we're called by the glib idle handler */ | |
3510 | 254 } |
255 | |
3554 | 256 static void docklet_embedded(GtkWidget *widget, void *data) { |
4093 | 257 debug_printf("Tray Icon: embedded\n"); |
3570 | 258 docklet_add(); |
3554 | 259 } |
260 | |
261 static void docklet_destroyed(GtkWidget *widget, void *data) { | |
4093 | 262 debug_printf("Tray Icon: destroyed\n"); |
263 | |
264 docklet_remove(); | |
265 | |
3570 | 266 docklet_flush_queue(); |
4093 | 267 |
268 g_object_unref(G_OBJECT(docklet)); | |
269 docklet = NULL; | |
270 | |
271 g_idle_add(docklet_create, NULL); | |
3554 | 272 } |
273 | |
4093 | 274 static gboolean docklet_create(void *data) { |
3510 | 275 GtkWidget *box; |
276 | |
3570 | 277 if (docklet) { |
4093 | 278 /* if this is being called when a tray icon exists, it's because |
279 something messed up. try destroying it before we proceed, | |
280 although docklet_refcount may be all hosed. hopefully won't happen. */ | |
281 debug_printf("Tray Icon: trying to create icon but it already exists?\n"); | |
282 gaim_plugin_remove(); | |
3510 | 283 } |
284 | |
285 docklet = egg_tray_icon_new("Gaim"); | |
286 box = gtk_event_box_new(); | |
287 icon = gtk_image_new(); | |
288 | |
3554 | 289 g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_embedded), NULL); |
290 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_destroyed), NULL); | |
291 g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_clicked), NULL); | |
3510 | 292 |
293 gtk_container_add(GTK_CONTAINER(box), icon); | |
294 gtk_container_add(GTK_CONTAINER(docklet), box); | |
295 gtk_widget_show_all(GTK_WIDGET(docklet)); | |
296 | |
3554 | 297 /* ref the docklet before we bandy it about the place */ |
298 g_object_ref(G_OBJECT(docklet)); | |
3510 | 299 docklet_update_status(); |
300 docklet_update_icon(); | |
301 | |
4093 | 302 debug_printf("Tray Icon: created\n"); |
303 | |
304 return FALSE; /* for when we're called by the glib idle handler */ | |
3510 | 305 } |
306 | |
307 static void gaim_signon(struct gaim_connection *gc, void *data) { | |
308 docklet_update_status(); | |
309 } | |
310 | |
311 static void gaim_signoff(struct gaim_connection *gc, void *data) { | |
4157 | 312 /* do this when idle so that if the prpl was connecting |
313 and was cancelled, we register that connecting_count | |
314 has returned to 0 */ | |
315 g_idle_add(docklet_update_status, NULL); | |
3510 | 316 } |
317 | |
318 static void gaim_connecting(struct aim_user *user, void *data) { | |
319 docklet_update_status(); | |
320 } | |
321 | |
322 static void gaim_away(struct gaim_connection *gc, char *state, char *message, void *data) { | |
323 /* we only support global away. this is the way it is, ok? */ | |
324 docklet_update_status(); | |
325 } | |
326 | |
3570 | 327 static void gaim_im_displayed_recv(struct gaim_connection *gc, char **who, char **what, void *data) { |
3510 | 328 /* if message queuing while away is enabled, this event could be the first |
329 message so we need to see if the status (and hence icon) needs changing */ | |
330 docklet_update_status(); | |
331 } | |
332 | |
3570 | 333 /* static void gaim_buddy_signon(struct gaim_connection *gc, char *who, void *data) { |
3510 | 334 } |
335 | |
336 static void gaim_buddy_signoff(struct gaim_connection *gc, char *who, void *data) { | |
337 } | |
338 | |
339 static void gaim_buddy_away(struct gaim_connection *gc, char *who, void *data) { | |
340 } | |
341 | |
342 static void gaim_buddy_back(struct gaim_connection *gc, char *who, void *data) { | |
343 } | |
344 | |
345 static void gaim_new_conversation(char *who, void *data) { | |
3570 | 346 } */ |
3510 | 347 |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
348 static void docklet_register_icon(const char *name, char *fn) { |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
349 gchar *filename; |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
350 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
351 filename = g_build_filename(DATADIR, "pixmaps", "gaim", fn, NULL); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
352 gtk_icon_factory_add(icon_factory, name, |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
353 gtk_icon_set_new_from_pixbuf(gdk_pixbuf_new_from_file(filename, NULL))); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
354 g_free(filename); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
355 } |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
356 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
357 static void docklet_register_icon_factory() { |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
358 icon_factory = gtk_icon_factory_new(); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
359 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
360 docklet_register_icon("gaim-docklet-offline", "offline.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
361 docklet_register_icon("gaim-docklet-connect", "connect.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
362 docklet_register_icon("gaim-docklet-online", "online.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
363 docklet_register_icon("gaim-docklet-msgunread", "msgunread.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
364 docklet_register_icon("gaim-docklet-away", "away.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
365 docklet_register_icon("gaim-docklet-msgpend", "msgpend.png"); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
366 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
367 gtk_icon_factory_add_default(icon_factory); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
368 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
369 icon_size = gtk_icon_size_register("gaim-docklet-size", 24, 24); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
370 } |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
371 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
372 static void docklet_unregister_icon_factory() { |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
373 /* does this actually free anything? it's a moot point seeing as |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
374 unloading the docklet crashes gaim, but it needs to be checked */ |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
375 gtk_icon_factory_remove_default(icon_factory); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
376 } |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
377 |
3510 | 378 char *gaim_plugin_init(GModule *handle) { |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
379 docklet_register_icon_factory(); |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
380 |
4093 | 381 docklet_create(NULL); |
3510 | 382 |
383 gaim_signal_connect(handle, event_signon, gaim_signon, NULL); | |
384 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL); | |
385 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL); | |
386 gaim_signal_connect(handle, event_away, gaim_away, NULL); | |
3570 | 387 gaim_signal_connect(handle, event_im_displayed_rcvd, gaim_im_displayed_recv, NULL); |
388 /* gaim_signal_connect(handle, event_buddy_signon, gaim_buddy_signon, NULL); | |
3510 | 389 gaim_signal_connect(handle, event_buddy_signoff, gaim_buddy_signoff, NULL); |
390 gaim_signal_connect(handle, event_buddy_away, gaim_buddy_away, NULL); | |
391 gaim_signal_connect(handle, event_buddy_back, gaim_buddy_back, NULL); | |
3570 | 392 gaim_signal_connect(handle, event_new_conversation, gaim_new_conversation, NULL); */ |
3510 | 393 |
394 return NULL; | |
395 } | |
396 | |
3554 | 397 void gaim_plugin_remove() { |
3570 | 398 if (GTK_WIDGET_VISIBLE(docklet)) { |
399 docklet_remove(); | |
400 } | |
3554 | 401 |
3570 | 402 docklet_flush_queue(); |
3554 | 403 |
3570 | 404 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_destroyed), NULL); |
405 gtk_widget_destroy(GTK_WIDGET(docklet)); | |
3554 | 406 |
4093 | 407 g_object_unref(G_OBJECT(docklet)); |
408 docklet = NULL; | |
4250
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
409 |
3b884e35e6b5
[gaim-migrate @ 4500]
Christian Hammond <chipx86@chipx86.com>
parents:
4157
diff
changeset
|
410 docklet_unregister_icon_factory(); |
4093 | 411 |
412 debug_printf("Tray Icon: removed\n"); | |
3554 | 413 } |
414 | |
3570 | 415 GtkWidget *gaim_plugin_config_gtk() { |
416 GtkWidget *frame; | |
417 GtkWidget *vbox, *hbox; | |
418 GtkWidget *toggle; | |
3517 | 419 |
3570 | 420 frame = gtk_vbox_new(FALSE, 18); |
421 gtk_container_set_border_width(GTK_CONTAINER(frame), 12); | |
422 | |
4093 | 423 vbox = make_frame(frame, _("Tray Icon Configuration")); |
3570 | 424 hbox = gtk_hbox_new(FALSE, 18); |
425 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
3517 | 426 |
3570 | 427 /* toggle = gtk_check_button_new_with_mnemonic(_("_Automatically show buddy list on sign on")); |
428 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), blist_options & OPT_BLIST_APP_BUDDY_SHOW); | |
429 g_signal_connect(G_OBJECT(toggle), "clicked", G_CALLBACK(docklet_toggle_blist_show), NULL); | |
430 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); */ | |
3517 | 431 |
4093 | 432 toggle = gtk_check_button_new_with_mnemonic(_("_Hide new messages until tray icon is clicked")); |
3570 | 433 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), away_options & OPT_AWAY_QUEUE_UNREAD); |
434 g_signal_connect(G_OBJECT(toggle), "clicked", G_CALLBACK(docklet_toggle_queue), NULL); | |
435 gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); | |
436 | |
437 gtk_widget_show_all(frame); | |
438 return frame; | |
3517 | 439 } |
3570 | 440 |
3551 | 441 struct gaim_plugin_description desc; |
442 struct gaim_plugin_description *gaim_plugin_desc() { | |
443 desc.api_version = PLUGIN_API_VERSION; | |
3773 | 444 desc.name = g_strdup(_("Tray Icon")); |
3551 | 445 desc.version = g_strdup(VERSION); |
4108 | 446 desc.description = g_strdup(_("Interacts with a System Tray applet (in GNOME or KDE, for example) to display the current status of Gaim, allow fast access to commonly used functions, and to toggle display of the buddy list or login window. Also allows messages to be queued until the icon is clicked, similar to ICQ (although the icon doesn't flash yet =).")); |
3570 | 447 desc.authors = g_strdup(_("Robert McQueen <robot101@debian.org>")); |
3551 | 448 desc.url = g_strdup(WEBSITE); |
449 return &desc; | |
450 } | |
3510 | 451 |
3570 | 452 char *name() { |
4093 | 453 return _("System Tray Icon"); |
3510 | 454 } |
455 | |
3570 | 456 char *description() { |
4093 | 457 return _("Interacts with a System Tray applet (in GNOME or KDE, for example) to display the current status of Gaim, allow fast access to commonly used functions, and to toggle display of the buddy list or login window. Also allows messages to be queued until the icon is clicked, similar to ICQ (although the icon doesn't flash yet =)."); |
3510 | 458 } |