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, |
