Mercurial > pidgin
comparison src/buddy_chat.c @ 1692:a312d64a995d
[gaim-migrate @ 1702]
and i thought i couldn't do it.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sun, 08 Apr 2001 09:26:00 +0000 |
parents | 171c64f70b66 |
children | 02653161cbce |
comparison
equal
deleted
inserted
replaced
1691:d802b115800f | 1692:a312d64a995d |
---|---|
49 static GtkWidget *inviteentry; | 49 static GtkWidget *inviteentry; |
50 static GtkWidget *invitemess; | 50 static GtkWidget *invitemess; |
51 static int community; | 51 static int community; |
52 extern int state_lock; | 52 extern int state_lock; |
53 | 53 |
54 GList *chats = NULL; | |
55 GtkWidget *all_chats = NULL; | |
56 GtkWidget *chat_notebook = NULL; | |
57 | |
54 static void destroy_join_chat() | 58 static void destroy_join_chat() |
55 { | 59 { |
56 if (joinchat) | 60 if (joinchat) |
57 gtk_widget_destroy(joinchat); | 61 gtk_widget_destroy(joinchat); |
58 joinchat = NULL; | 62 joinchat = NULL; |
707 gtk_list_insert_items(GTK_LIST(b->list), g_list_append(NULL, list_item), pos); | 711 gtk_list_insert_items(GTK_LIST(b->list), g_list_append(NULL, list_item), pos); |
708 gtk_widget_destroy(i->data); | 712 gtk_widget_destroy(i->data); |
709 gtk_widget_show(list_item); | 713 gtk_widget_show(list_item); |
710 } | 714 } |
711 | 715 |
712 | 716 static gint delete_all_chats(GtkWidget *w, GdkEventAny *e, gpointer d) |
717 { | |
718 while (chats) { | |
719 struct conversation *c = chats->data; | |
720 close_callback(c->close, c); | |
721 } | |
722 return FALSE; | |
723 } | |
724 | |
725 static void chat_switch(GtkNotebook *notebook, GtkWidget *page, gint page_num, gpointer data) | |
726 { | |
727 GtkWidget *label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(chat_notebook), | |
728 gtk_notebook_get_nth_page(GTK_NOTEBOOK(chat_notebook), page_num)); | |
729 GtkStyle *style; | |
730 struct conversation *b = g_list_nth_data(chats, page_num); | |
731 if (b && b->window && b->entry) | |
732 gtk_window_set_focus(GTK_WINDOW(b->window), b->entry); | |
733 if (!GTK_WIDGET_REALIZED(label)) | |
734 return; | |
735 style = gtk_style_new(); | |
736 gdk_font_unref(style->font); | |
737 style->font = gdk_font_ref(label->style->font); | |
738 gtk_widget_set_style(label, style); | |
739 gtk_style_unref(style); | |
740 b->unseen = FALSE; | |
741 } | |
713 | 742 |
714 void show_new_buddy_chat(struct conversation *b) | 743 void show_new_buddy_chat(struct conversation *b) |
715 { | 744 { |
716 GtkWidget *win; | 745 GtkWidget *win; |
746 GtkWidget *cont; | |
717 GtkWidget *text; | 747 GtkWidget *text; |
718 GtkWidget *send; | 748 GtkWidget *send; |
719 GtkWidget *list; | 749 GtkWidget *list; |
720 GtkWidget *invite_btn; | 750 GtkWidget *invite_btn; |
721 GtkWidget *whisper; | 751 GtkWidget *whisper; |
733 GtkWidget *toolbar; | 763 GtkWidget *toolbar; |
734 char buf[BUF_LONG]; | 764 char buf[BUF_LONG]; |
735 | 765 |
736 int dispstyle = set_dispstyle(1); | 766 int dispstyle = set_dispstyle(1); |
737 | 767 |
738 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 768 if (display_options & OPT_DISP_ONE_CHAT_WINDOW) { |
739 b->window = win; | 769 if (!all_chats) { |
740 gtk_object_set_user_data(GTK_OBJECT(win), b); | 770 win = all_chats = b->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
741 gtk_window_set_wmclass(GTK_WINDOW(win), "buddy_chat", "Gaim"); | 771 gtk_window_set_wmclass(GTK_WINDOW(win), "buddy_chat", "Gaim"); |
742 gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, TRUE); | 772 gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, TRUE); |
743 gtk_container_border_width(GTK_CONTAINER(win), 10); | 773 gtk_container_border_width(GTK_CONTAINER(win), 0); |
744 g_snprintf(buf, sizeof(buf), "Gaim - %s (chat)", b->name); | 774 gtk_widget_realize(win); |
745 gtk_window_set_title(GTK_WINDOW(win), buf); | 775 aol_icon(win->window); |
746 gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(close_callback), b); | 776 gtk_window_set_title(GTK_WINDOW(win), _("Gaim - Group Chats")); |
747 gtk_widget_realize(win); | 777 gtk_signal_connect(GTK_OBJECT(win), "delete_event", |
748 aol_icon(win->window); | 778 GTK_SIGNAL_FUNC(delete_all_chats), NULL); |
779 | |
780 chat_notebook = gtk_notebook_new(); | |
781 gtk_notebook_set_scrollable(GTK_NOTEBOOK(chat_notebook), TRUE); | |
782 gtk_notebook_popup_enable(GTK_NOTEBOOK(chat_notebook)); | |
783 gtk_container_add(GTK_CONTAINER(win), chat_notebook); | |
784 gtk_signal_connect(GTK_OBJECT(chat_notebook), "switch-page", | |
785 GTK_SIGNAL_FUNC(chat_switch), NULL); | |
786 gtk_widget_show(chat_notebook); | |
787 } else | |
788 win = b->window = all_chats; | |
789 | |
790 cont = gtk_vbox_new(FALSE, 5); | |
791 gtk_container_set_border_width(GTK_CONTAINER(cont), 5); | |
792 gtk_notebook_append_page(GTK_NOTEBOOK(chat_notebook), cont, gtk_label_new(b->name)); | |
793 gtk_widget_show(cont); | |
794 } else { | |
795 cont = win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
796 b->window = win; | |
797 gtk_object_set_user_data(GTK_OBJECT(win), b); | |
798 gtk_window_set_wmclass(GTK_WINDOW(win), "buddy_chat", "Gaim"); | |
799 gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, TRUE); | |
800 gtk_container_border_width(GTK_CONTAINER(win), 10); | |
801 gtk_widget_realize(win); | |
802 aol_icon(win->window); | |
803 g_snprintf(buf, sizeof(buf), "Gaim - %s (chat)", b->name); | |
804 gtk_window_set_title(GTK_WINDOW(win), buf); | |
805 gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(close_callback), b); | |
806 } | |
749 | 807 |
750 vpaned = gtk_vpaned_new(); | 808 vpaned = gtk_vpaned_new(); |
751 gtk_paned_set_gutter_size(GTK_PANED(vpaned), 15); | 809 gtk_paned_set_gutter_size(GTK_PANED(vpaned), 15); |
752 gtk_container_add(GTK_CONTAINER(win), vpaned); | 810 gtk_container_add(GTK_CONTAINER(cont), vpaned); |
753 gtk_widget_show(vpaned); | 811 gtk_widget_show(vpaned); |
754 | 812 |
755 hpaned = gtk_hpaned_new(); | 813 hpaned = gtk_hpaned_new(); |
756 gtk_paned_set_gutter_size(GTK_PANED(hpaned), 15); | 814 gtk_paned_set_gutter_size(GTK_PANED(hpaned), 15); |
757 gtk_paned_pack1(GTK_PANED(vpaned), hpaned, TRUE, FALSE); | 815 gtk_paned_pack1(GTK_PANED(vpaned), hpaned, TRUE, FALSE); |
758 gtk_widget_show(hpaned); | 816 gtk_widget_show(hpaned); |
759 | 817 |
760 sw = gtk_scrolled_window_new(NULL, NULL); | 818 sw = gtk_scrolled_window_new(NULL, NULL); |
819 b->sw = sw; | |
761 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); | 820 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
762 gtk_paned_pack1(GTK_PANED(hpaned), sw, TRUE, TRUE); | 821 gtk_paned_pack1(GTK_PANED(hpaned), sw, TRUE, TRUE); |
763 gtk_widget_set_usize(sw, 320, 160); | 822 gtk_widget_set_usize(sw, 320, 160); |
764 gtk_widget_show(sw); | 823 gtk_widget_show(sw); |
765 | 824 |
818 gtk_paned_pack2(GTK_PANED(vpaned), vbox, TRUE, FALSE); | 877 gtk_paned_pack2(GTK_PANED(vpaned), vbox, TRUE, FALSE); |
819 gtk_widget_show(vbox); | 878 gtk_widget_show(vbox); |
820 | 879 |
821 chatentry = gtk_text_new(NULL, NULL); | 880 chatentry = gtk_text_new(NULL, NULL); |
822 b->entry = chatentry; | 881 b->entry = chatentry; |
882 if (!(display_options & OPT_DISP_ONE_CHAT_WINDOW)) | |
883 gtk_window_set_focus(GTK_WINDOW(b->window), b->entry); | |
823 | 884 |
824 toolbar = build_conv_toolbar(b); | 885 toolbar = build_conv_toolbar(b); |
825 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); | 886 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); |
826 | 887 |
827 gtk_object_set_user_data(GTK_OBJECT(chatentry), b); | 888 gtk_object_set_user_data(GTK_OBJECT(chatentry), b); |
1036 gtk_signal_connect(GTK_OBJECT(c->warn), "clicked", GTK_SIGNAL_FUNC(warn_callback), c); | 1097 gtk_signal_connect(GTK_OBJECT(c->warn), "clicked", GTK_SIGNAL_FUNC(warn_callback), c); |
1037 gtk_signal_connect(GTK_OBJECT(c->block), "clicked", GTK_SIGNAL_FUNC(block_callback), c); | 1098 gtk_signal_connect(GTK_OBJECT(c->block), "clicked", GTK_SIGNAL_FUNC(block_callback), c); |
1038 bcs = bcs->next; | 1099 bcs = bcs->next; |
1039 } | 1100 } |
1040 } | 1101 } |
1102 | |
1103 void chat_tabize() | |
1104 { | |
1105 /* evil, evil i tell you! evil! */ | |
1106 if (display_options & OPT_DISP_ONE_CHAT_WINDOW) { | |
1107 GList *x = chats; | |
1108 while (x) { | |
1109 struct conversation *c = x->data; | |
1110 GtkWidget *imhtml, *win; | |
1111 | |
1112 imhtml = c->text; | |
1113 win = c->window; | |
1114 show_new_buddy_chat(c); | |
1115 gtk_widget_destroy(c->text); | |
1116 gtk_widget_reparent(imhtml, c->sw); | |
1117 c->text = imhtml; | |
1118 gtk_signal_disconnect_by_func(GTK_OBJECT(win), | |
1119 GTK_SIGNAL_FUNC(close_callback), c); | |
1120 gtk_widget_destroy(win); | |
1121 | |
1122 x = x->next; | |
1123 } | |
1124 } else { | |
1125 GList *x, *m; | |
1126 x = m = chats; | |
1127 chats = NULL; | |
1128 while (x) { | |
1129 struct conversation *c = x->data; | |
1130 GtkWidget *imhtml; | |
1131 | |
1132 imhtml = c->text; | |
1133 show_new_buddy_chat(c); | |
1134 gtk_widget_destroy(c->text); | |
1135 gtk_widget_reparent(imhtml, c->sw); | |
1136 c->text = imhtml; | |
1137 | |
1138 x = x->next; | |
1139 } | |
1140 if (all_chats) | |
1141 gtk_widget_destroy(all_chats); | |
1142 all_chats = NULL; | |
1143 chats = m; | |
1144 } | |
1145 } |