Mercurial > pidgin
comparison src/buddy.c @ 4698:aa2ceea841b4
[gaim-migrate @ 5009]
The docklet's back.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Tue, 11 Mar 2003 00:09:45 +0000 |
parents | 4be12ff42986 |
children | 2222cd30008a |
comparison
equal
deleted
inserted
replaced
4697:4be12ff42986 | 4698:aa2ceea841b4 |
---|---|
54 #include "win32dep.h" | 54 #include "win32dep.h" |
55 #endif | 55 #endif |
56 | 56 |
57 static struct gaim_gtk_buddy_list *gtkblist = NULL; | 57 static struct gaim_gtk_buddy_list *gtkblist = NULL; |
58 | 58 |
59 /* Docklet nonsense */ | |
60 static gboolean gaim_gtk_blist_obscured = FALSE; | |
61 | |
59 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node); | 62 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node); |
60 | 63 |
61 /*************************************************** | 64 /*************************************************** |
62 * Callbacks * | 65 * Callbacks * |
63 ***************************************************/ | 66 ***************************************************/ |
67 | |
68 static void gaim_gtk_blist_destroy_cb() | |
69 { | |
70 if (docklet_count) | |
71 gaim_blist_set_visible(FALSE); | |
72 else | |
73 do_quit(); | |
74 } | |
64 | 75 |
65 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b) | 76 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b) |
66 { | 77 { |
67 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); | 78 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); |
68 } | 79 } |
300 { N_("/Tools/Buddy _Pounce"), NULL, NULL, 0, "<Branch>" }, | 311 { N_("/Tools/Buddy _Pounce"), NULL, NULL, 0, "<Branch>" }, |
301 { N_("/Tools/sep1"), NULL, NULL, 0, "<Separator>" }, | 312 { N_("/Tools/sep1"), NULL, NULL, 0, "<Separator>" }, |
302 { N_("/Tools/A_ccounts"), "<CTL>A", account_editor, 0, NULL }, | 313 { N_("/Tools/A_ccounts"), "<CTL>A", account_editor, 0, NULL }, |
303 { N_("/Tools/Preferences"), "<CTL>P", show_prefs, 0, | 314 { N_("/Tools/Preferences"), "<CTL>P", show_prefs, 0, |
304 "<StockItem>", GTK_STOCK_PREFERENCES }, | 315 "<StockItem>", GTK_STOCK_PREFERENCES }, |
305 { N_("/Tools/_File Transfers"), NULL, NULL, 0, | 316 { N_("/Tools/_File Transfers"), NULL, gaim_show_xfer_dialog, 0, |
306 "<StockItem>", GTK_STOCK_REVERT_TO_SAVED }, | 317 "<StockItem>", GTK_STOCK_REVERT_TO_SAVED }, |
307 { N_("/Tools/sep2"), NULL, NULL, 0, "<Separator>" }, | 318 { N_("/Tools/sep2"), NULL, NULL, 0, "<Separator>" }, |
308 { N_("/Tools/P_rotocol Actions"), NULL, NULL, 0, "<Branch>" }, | 319 { N_("/Tools/P_rotocol Actions"), NULL, NULL, 0, "<Branch>" }, |
309 { N_("/Tools/Pr_ivacy"), NULL, show_privacy_options, 0, NULL }, | 320 { N_("/Tools/Pr_ivacy"), NULL, show_privacy_options, 0, NULL }, |
310 { N_("/Tools/View System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, NULL }, | 321 { N_("/Tools/View System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, NULL }, |
559 gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List")); | 570 gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List")); |
560 | 571 |
561 gtkblist->vbox = gtk_vbox_new(FALSE, 6); | 572 gtkblist->vbox = gtk_vbox_new(FALSE, 6); |
562 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); | 573 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); |
563 | 574 |
575 g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gaim_gtk_blist_destroy_cb), NULL); | |
576 | |
564 /******************************* Menu bar *************************************/ | 577 /******************************* Menu bar *************************************/ |
565 ift = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<GaimMain>", NULL); | 578 ift = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<GaimMain>", NULL); |
566 gtk_item_factory_create_items(ift, sizeof(blist_menu) / sizeof(*blist_menu), | 579 gtk_item_factory_create_items(ift, sizeof(blist_menu) / sizeof(*blist_menu), |
567 blist_menu, NULL); | 580 blist_menu, NULL); |
568 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtk_item_factory_get_widget(ift, "<GaimMain>"), FALSE, FALSE, 0); | 581 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtk_item_factory_get_widget(ift, "<GaimMain>"), FALSE, FALSE, 0); |
826 gtk_widget_destroy(gtkblist->window); | 839 gtk_widget_destroy(gtkblist->window); |
827 } | 840 } |
828 | 841 |
829 static void gaim_gtk_blist_set_visible(struct gaim_buddy_list *list, gboolean show) | 842 static void gaim_gtk_blist_set_visible(struct gaim_buddy_list *list, gboolean show) |
830 { | 843 { |
831 if (show) | 844 if (show) { |
832 gtk_widget_show(gtkblist->window); | 845 gtk_window_present(gtkblist->window); |
833 else | 846 } else { |
834 gtk_widget_hide(gtkblist->window); | 847 if (!connections || docklet_count) { |
848 #ifdef _WIN32 | |
849 wgaim_systray_minimize(blist); | |
850 #endif | |
851 gtk_widget_hide(gtkblist->window); | |
852 } else { | |
853 gtk_window_iconify(GTK_WINDOW(gtkblist->window)); | |
854 } | |
855 } | |
856 } | |
857 | |
858 void gaim_gtk_blist_docklet_toggle() { | |
859 /* Useful for the docklet plugin and also for the win32 tray icon*/ | |
860 /* This is called when one of those is clicked--it will show/hide the | |
861 buddy list/login window--depending on which is active */ | |
862 if (connections && gtkblist) { | |
863 if (GTK_WIDGET_VISIBLE(gtkblist->window)) { | |
864 gaim_blist_set_visible(GAIM_WINDOW_ICONIFIED(gtkblist->window) || gaim_gtk_blist_obscured); | |
865 } else { | |
866 #if _WIN32 | |
867 wgaim_systray_maximize(blist); | |
868 #endif | |
869 gaim_blist_set_visible(TRUE); | |
870 } | |
871 } else if (connections) { | |
872 /* we're logging in or something... do nothing */ | |
873 debug_printf("docklet_toggle called with connections but no blist!\n"); | |
874 } else { | |
875 if (GTK_WIDGET_VISIBLE(mainwindow)) { | |
876 if (GAIM_WINDOW_ICONIFIED(mainwindow)) { | |
877 gtk_window_present(GTK_WINDOW(mainwindow)); | |
878 } else { | |
879 #if _WIN32 | |
880 wgaim_systray_minimize(mainwindow); | |
881 #endif | |
882 gtk_widget_hide(mainwindow); | |
883 } | |
884 } else { | |
885 #if _WIN32 | |
886 wgaim_systray_maximize(mainwindow); | |
887 #endif | |
888 gtk_window_present(GTK_WINDOW(mainwindow)); | |
889 } | |
890 } | |
891 } | |
892 | |
893 void gaim_gtk_blist_docklet_add() | |
894 { | |
895 docklet_count++; | |
896 } | |
897 | |
898 void gaim_gtk_blist_docklet_remove() | |
899 { | |
900 docklet_count--; | |
901 if (!docklet_count) { | |
902 if (connections) { | |
903 gaim_blist_set_visible(TRUE); | |
904 } else { | |
905 gtk_window_present(GTK_WINDOW(gtkblist->window)); | |
906 } | |
907 } | |
835 } | 908 } |
836 | 909 |
837 static struct gaim_blist_ui_ops blist_ui_ops = | 910 static struct gaim_blist_ui_ops blist_ui_ops = |
838 { | 911 { |
839 gaim_gtk_blist_new_list, | 912 gaim_gtk_blist_new_list, |