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");