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 }