Mercurial > pidgin
comparison plugins/docklet/docklet.c @ 5024:8e55a4d362a3
[gaim-migrate @ 5361]
Patch by Rob McQueen, NEWS and CREDITS updates.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 05 Apr 2003 05:01:47 +0000 |
parents | a701ef925850 |
children | fefad67de2c7 |
comparison
equal
deleted
inserted
replaced
5023:e218d2d2b7e9 | 5024:8e55a4d362a3 |
---|---|
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
19 * 02111-1307, USA. | 19 * 02111-1307, USA. |
20 */ | 20 */ |
21 | 21 |
22 /* todo (in order of importance): | 22 /* todo (in order of importance): |
23 - check removing the icon factory actually frees the icons | |
24 - unify the queue so we can have a global away without the dialog | 23 - unify the queue so we can have a global away without the dialog |
25 - handle and update tooltips to show your current accounts/queued messages? | 24 - handle and update tooltips to show your current accounts/queued messages? |
26 - show a count of queued messages in the unified queue | 25 - show a count of queued messages in the unified queue |
27 - dernyi's account status menu in the right click | 26 - dernyi's account status menu in the right click |
28 - optional pop up notices when GNOME2's system-tray-applet supports it */ | 27 - optional pop up notices when GNOME2's system-tray-applet supports it */ |
55 void gaim_plugin_remove(); | 54 void gaim_plugin_remove(); |
56 | 55 |
57 /* globals */ | 56 /* globals */ |
58 static EggTrayIcon *docklet = NULL; | 57 static EggTrayIcon *docklet = NULL; |
59 static GtkWidget *image = NULL; | 58 static GtkWidget *image = NULL; |
60 static GtkIconFactory *icon_factory = NULL; | |
61 static enum docklet_status status; | 59 static enum docklet_status status; |
62 static enum docklet_status icon; | 60 static enum docklet_status icon; |
63 | 61 |
64 static void docklet_toggle_mute(GtkWidget *toggle, void *data) { | 62 static void docklet_toggle_mute(GtkWidget *toggle, void *data) { |
65 gaim_sound_set_mute(GTK_CHECK_MENU_ITEM(toggle)->active); | 63 gaim_sound_set_mute(GTK_CHECK_MENU_ITEM(toggle)->active); |
92 menu = gtk_menu_new(); | 90 menu = gtk_menu_new(); |
93 | 91 |
94 switch (status) { | 92 switch (status) { |
95 case offline: | 93 case offline: |
96 case offline_connecting: | 94 case offline_connecting: |
97 entry = gtk_menu_item_new_with_label(_("Auto-login")); | 95 gaim_new_item_from_stock(menu, _("Auto-login"), GAIM_STOCK_SIGN_ON, G_CALLBACK(auto_login), NULL, 0, 0, NULL); |
98 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(auto_login), NULL); | |
99 gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); | |
100 break; | 96 break; |
101 default: | 97 default: |
102 gaim_new_item_from_stock(menu, _("New Message.."), GTK_STOCK_CONVERT, G_CALLBACK(show_im_dialog), NULL, 0, 0, NULL); | 98 gaim_new_item_from_stock(menu, _("New Message.."), GAIM_STOCK_IM, G_CALLBACK(show_im_dialog), NULL, 0, 0, NULL); |
103 gaim_new_item_from_stock(menu, _("Join A Chat..."), GTK_STOCK_JUMP_TO, G_CALLBACK(join_chat), NULL, 0, 0, NULL); | 99 gaim_new_item_from_stock(menu, _("Join A Chat..."), GAIM_STOCK_CHAT, G_CALLBACK(join_chat), NULL, 0, 0, NULL); |
104 break; | 100 break; |
105 } | 101 } |
106 | 102 |
107 switch (status) { | 103 switch (status) { |
108 case offline: | 104 case offline: |
152 entry = gtk_check_menu_item_new_with_label(_("Mute Sounds")); | 148 entry = gtk_check_menu_item_new_with_label(_("Mute Sounds")); |
153 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), gaim_sound_get_mute()); | 149 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), gaim_sound_get_mute()); |
154 g_signal_connect(G_OBJECT(entry), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); | 150 g_signal_connect(G_OBJECT(entry), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); |
155 gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); | 151 gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); |
156 | 152 |
157 gaim_new_item_from_stock(menu, _("File Transfers..."), GTK_STOCK_REVERT_TO_SAVED, G_CALLBACK(gaim_show_xfer_dialog), NULL, 0, 0, NULL); | 153 gaim_new_item_from_stock(menu, _("File Transfers..."), GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(gaim_show_xfer_dialog), NULL, 0, 0, NULL); |
158 gaim_new_item_from_pixbuf(menu, _("Accounts..."), "accounts-menu.png", G_CALLBACK(account_editor), NULL, 0, 0, NULL); | 154 gaim_new_item_from_stock(menu, _("Accounts..."), GAIM_STOCK_ACCOUNTS, G_CALLBACK(account_editor), NULL, 0, 0, NULL); |
159 gaim_new_item_from_stock(menu, _("Preferences..."), GTK_STOCK_PREFERENCES, G_CALLBACK(show_prefs), NULL, 0, 0, NULL); | 155 gaim_new_item_from_stock(menu, _("Preferences..."), GTK_STOCK_PREFERENCES, G_CALLBACK(show_prefs), NULL, 0, 0, NULL); |
160 | 156 |
161 gaim_separator(menu); | 157 gaim_separator(menu); |
162 | 158 |
163 switch (status) { | 159 switch (status) { |
164 case offline: | 160 case offline: |
165 case offline_connecting: | 161 case offline_connecting: |
166 break; | 162 break; |
167 default: | 163 default: |
168 entry = gtk_menu_item_new_with_label(_("Signoff")); | 164 gaim_new_item_from_stock(menu, _("Signoff"), GTK_STOCK_CLOSE, G_CALLBACK(signoff_all), NULL, 0, 0, 0); |
169 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(signoff_all), NULL); | |
170 gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); | |
171 break; | 165 break; |
172 } | 166 } |
173 | 167 |
174 gaim_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(do_quit), NULL, 0, 0, 0); | 168 gaim_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(do_quit), NULL, 0, 0, 0); |
175 | 169 |
201 static void docklet_update_icon() { | 195 static void docklet_update_icon() { |
202 const gchar *icon_name = NULL; | 196 const gchar *icon_name = NULL; |
203 | 197 |
204 switch (icon) { | 198 switch (icon) { |
205 case offline: | 199 case offline: |
206 icon_name = "gaim-docklet-offline"; | 200 icon_name = GAIM_STOCK_ICON_OFFLINE; |
207 break; | 201 break; |
208 case offline_connecting: | 202 case offline_connecting: |
209 case online_connecting: | 203 case online_connecting: |
210 icon_name = "gaim-docklet-connect"; | 204 icon_name = GAIM_STOCK_ICON_CONNECT; |
211 break; | 205 break; |
212 case online: | 206 case online: |
213 icon_name = "gaim-docklet-online"; | 207 icon_name = GAIM_STOCK_ICON_ONLINE; |
214 break; | 208 break; |
215 case online_pending: | 209 case online_pending: |
216 icon_name = "gaim-docklet-msgunread"; | 210 icon_name = GAIM_STOCK_ICON_ONLINE_MSG; |
217 break; | 211 break; |
218 case away: | 212 case away: |
219 icon_name = "gaim-docklet-away"; | 213 icon_name = GAIM_STOCK_ICON_AWAY; |
220 break; | 214 break; |
221 case away_pending: | 215 case away_pending: |
222 icon_name = "gaim-docklet-msgpend"; | 216 icon_name = GAIM_STOCK_ICON_AWAY_MSG; |
223 break; | 217 break; |
224 } | 218 } |
225 | 219 |
226 gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); | 220 gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); |
227 } | 221 } |
398 } | 392 } |
399 | 393 |
400 static void gaim_new_conversation(char *who, void *data) { | 394 static void gaim_new_conversation(char *who, void *data) { |
401 } */ | 395 } */ |
402 | 396 |
403 static void docklet_register_icon(const char *name, char *fn) { | |
404 gchar *filename; | |
405 | |
406 filename = g_build_filename(DATADIR, "pixmaps", "gaim", fn, NULL); | |
407 gtk_icon_factory_add(icon_factory, name, | |
408 gtk_icon_set_new_from_pixbuf(gdk_pixbuf_new_from_file(filename, NULL))); | |
409 g_free(filename); | |
410 } | |
411 | |
412 static void docklet_register_icon_factory() { | |
413 icon_factory = gtk_icon_factory_new(); | |
414 | |
415 docklet_register_icon("gaim-docklet-offline", "offline.png"); | |
416 docklet_register_icon("gaim-docklet-connect", "connect.png"); | |
417 docklet_register_icon("gaim-docklet-online", "online.png"); | |
418 docklet_register_icon("gaim-docklet-msgunread", "msgunread.png"); | |
419 docklet_register_icon("gaim-docklet-away", "away.png"); | |
420 docklet_register_icon("gaim-docklet-msgpend", "msgpend.png"); | |
421 | |
422 gtk_icon_factory_add_default(icon_factory); | |
423 } | |
424 | |
425 static void docklet_unregister_icon_factory() { | |
426 gtk_icon_factory_remove_default(icon_factory); | |
427 } | |
428 | |
429 char *gaim_plugin_init(GModule *handle) { | 397 char *gaim_plugin_init(GModule *handle) { |
430 docklet_register_icon_factory(); | |
431 | |
432 docklet_create(NULL); | 398 docklet_create(NULL); |
433 | 399 |
434 gaim_signal_connect(handle, event_signon, gaim_signon, NULL); | 400 gaim_signal_connect(handle, event_signon, gaim_signon, NULL); |
435 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL); | 401 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL); |
436 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL); | 402 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL); |
457 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_destroyed), NULL); | 423 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_destroyed), NULL); |
458 gtk_widget_destroy(GTK_WIDGET(docklet)); | 424 gtk_widget_destroy(GTK_WIDGET(docklet)); |
459 | 425 |
460 g_object_unref(G_OBJECT(docklet)); | 426 g_object_unref(G_OBJECT(docklet)); |
461 docklet = NULL; | 427 docklet = NULL; |
462 | |
463 docklet_unregister_icon_factory(); | |
464 | 428 |
465 /* do this while gaim has no other way to toggle the global mute */ | 429 /* do this while gaim has no other way to toggle the global mute */ |
466 gaim_sound_set_mute(FALSE); | 430 gaim_sound_set_mute(FALSE); |
467 | 431 |
468 debug_printf("Tray Icon: removed\n"); | 432 debug_printf("Tray Icon: removed\n"); |