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,