Mercurial > pidgin.yaz
comparison src/buddy_chat.c @ 3762:ac18a395eced
[gaim-migrate @ 3901]
oops
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Sun, 20 Oct 2002 05:16:34 +0000 |
parents | d7e83b4db191 |
children | 165ae100e0a7 |
comparison
equal
deleted
inserted
replaced
3761:a9f7421cdd9f | 3762:ac18a395eced |
---|---|
61 GtkWidget *chat_notebook = NULL; | 61 GtkWidget *chat_notebook = NULL; |
62 | 62 |
63 static char *ignored(struct conversation *b, char *who) | 63 static char *ignored(struct conversation *b, char *who) |
64 { | 64 { |
65 GList *ignore = b->ignored; | 65 GList *ignore = b->ignored; |
66 | |
66 while (ignore) { | 67 while (ignore) { |
67 char *ign = ignore->data; | 68 char *ign = ignore->data; |
68 if (!g_strcasecmp(who, ign)) | 69 if (!g_strcasecmp(who, ign)) |
69 return ign; | 70 return ign; |
70 if (*ign == '+' && !g_strcasecmp(who, ign + 1)) | 71 if (*ign == '+' && !g_strcasecmp(who, ign + 1)) |
644 break; | 645 break; |
645 } | 646 } |
646 c++; /* i really don't like c++ either */ | 647 c++; /* i really don't like c++ either */ |
647 len--; | 648 len--; |
648 } | 649 } |
649 /* k, so now we've gotten past all the HTML crap. */ | 650 /* k, so now we've gotten past all the HTML who. */ |
650 if (!*c) | 651 if (!*c) |
651 return FALSE; | 652 return FALSE; |
652 if (!g_strncasecmp(c, "/me ", 4)) { | 653 if (!g_strncasecmp(c, "/me ", 4)) { |
653 memmove(c, c + 4, len - 3); | 654 memmove(c, c + 4, len - 3); |
654 return TRUE; | 655 return TRUE; |
775 } | 776 } |
776 } | 777 } |
777 | 778 |
778 static void chat_press_ign(GtkWidget *obj, struct conversation *b) | 779 static void chat_press_ign(GtkWidget *obj, struct conversation *b) |
779 { | 780 { |
780 gtk_list_select_child(GTK_LIST(b->list), gtk_object_get_user_data(GTK_OBJECT(obj))); | |
781 ignore_callback(obj, b); | 781 ignore_callback(obj, b); |
782 } | 782 } |
783 | 783 |
784 static void chat_press_info(GtkObject *obj, struct conversation *b) | 784 static void chat_press_info(GtkObject *obj, struct conversation *b) |
785 { | 785 { |
824 } | 824 } |
825 /* End Jonas */ | 825 /* End Jonas */ |
826 | 826 |
827 static gint right_click_chat(GtkObject *obj, GdkEventButton *event, struct conversation *b) | 827 static gint right_click_chat(GtkObject *obj, GdkEventButton *event, struct conversation *b) |
828 { | 828 { |
829 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { | 829 GtkTreePath *path; |
830 int x; | |
831 int y; | |
832 GtkTreeIter iter; | |
833 GtkTreeModel *mod; | |
834 GtkTreeViewColumn *column; | |
835 gchar *who; | |
836 | |
837 | |
838 mod = gtk_tree_view_get_model(GTK_TREE_VIEW(b->list)); | |
839 | |
840 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(b->list), event->x, event->y, &path, &column, &x, &y); | |
841 | |
842 if (path == NULL) | |
843 return; | |
844 | |
845 gtk_tree_selection_select_path(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(b->list))), path); | |
846 gtk_tree_model_get_iter(GTK_TREE_MODEL(mod), &iter, path); | |
847 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 1, &who, -1); | |
848 | |
849 if ((event->button == 1) && (event->type == GDK_2BUTTON_PRESS)) { | |
830 struct conversation *c; | 850 struct conversation *c; |
831 if ((c = find_conversation(gtk_object_get_user_data(obj))) == NULL) | 851 |
832 c = new_conversation(gtk_object_get_user_data(obj)); | 852 if ((c = find_conversation(who)) == NULL) |
853 c = new_conversation(who); | |
854 | |
833 set_convo_gc(c, b->gc); | 855 set_convo_gc(c, b->gc); |
834 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { | 856 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { |
835 static GtkWidget *menu = NULL; | 857 static GtkWidget *menu = NULL; |
836 GtkWidget *button; | 858 GtkWidget *button; |
837 | 859 |
838 /* | 860 /* |
839 * If a menu already exists, destroy it before creating a new one, | 861 * If a menu already exists, destroy it before creating a new one, |
840 * thus freeing-up the memory it occupied. | 862 * thus freeing-up the memory it occupied. |
841 */ | 863 */ |
864 | |
842 if(menu) | 865 if(menu) |
843 gtk_widget_destroy(menu); | 866 gtk_widget_destroy(menu); |
844 | 867 |
845 menu = gtk_menu_new(); | 868 menu = gtk_menu_new(); |
846 | 869 |
847 button = gtk_menu_item_new_with_label(_("IM")); | 870 button = gtk_menu_item_new_with_label(_("IM")); |
848 gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(chat_press_im), b); | 871 gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(chat_press_im), b); |
849 gtk_object_set_user_data(GTK_OBJECT(button), gtk_object_get_user_data(obj)); | 872 gtk_object_set_user_data(GTK_OBJECT(button), who); |
850 gtk_menu_append(GTK_MENU(menu), button); | 873 gtk_menu_append(GTK_MENU(menu), button); |
851 gtk_widget_show(button); | 874 gtk_widget_show(button); |
852 | 875 |
853 if (ignored(b, gtk_object_get_user_data(obj))) | 876 if (ignored(b, gtk_object_get_user_data(obj))) |
854 button = gtk_menu_item_new_with_label(_("Un-Ignore")); | 877 button = gtk_menu_item_new_with_label(_("Un-Ignore")); |
855 else | 878 else |
856 button = gtk_menu_item_new_with_label(_("Ignore")); | 879 button = gtk_menu_item_new_with_label(_("Ignore")); |
857 | 880 |
858 gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(chat_press_ign), b); | 881 gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(chat_press_ign), b); |
859 gtk_object_set_user_data(GTK_OBJECT(button), obj); | 882 gtk_object_set_user_data(GTK_OBJECT(button), who); |
860 gtk_menu_append(GTK_MENU(menu), button); | 883 gtk_menu_append(GTK_MENU(menu), button); |
861 gtk_widget_show(button); | 884 gtk_widget_show(button); |
862 | 885 |
863 if (b->gc && b->gc->prpl->get_info) { | 886 if (b->gc && b->gc->prpl->get_info) { |
864 button = gtk_menu_item_new_with_label(_("Info")); | 887 button = gtk_menu_item_new_with_label(_("Info")); |
865 gtk_signal_connect(GTK_OBJECT(button), "activate", | 888 gtk_signal_connect(GTK_OBJECT(button), "activate", |
866 GTK_SIGNAL_FUNC(chat_press_info), b); | 889 GTK_SIGNAL_FUNC(chat_press_info), b); |
867 gtk_object_set_user_data(GTK_OBJECT(button), gtk_object_get_user_data(obj)); | 890 gtk_object_set_user_data(GTK_OBJECT(button), who); |
868 gtk_menu_append(GTK_MENU(menu), button); | 891 gtk_menu_append(GTK_MENU(menu), button); |
869 gtk_widget_show(button); | 892 gtk_widget_show(button); |
870 } | 893 } |
871 | 894 |
872 if (b->gc && b->gc->prpl->get_cb_away) { | 895 if (b->gc && b->gc->prpl->get_cb_away) { |
873 button = gtk_menu_item_new_with_label(_("Get Away Msg")); | 896 button = gtk_menu_item_new_with_label(_("Get Away Msg")); |
874 gtk_signal_connect(GTK_OBJECT(button), "activate", | 897 gtk_signal_connect(GTK_OBJECT(button), "activate", |
875 GTK_SIGNAL_FUNC(chat_press_away), b); | 898 GTK_SIGNAL_FUNC(chat_press_away), b); |
876 gtk_object_set_user_data(GTK_OBJECT(button), gtk_object_get_user_data(obj)); | 899 gtk_object_set_user_data(GTK_OBJECT(button), who); |
877 gtk_menu_append(GTK_MENU(menu), button); | 900 gtk_menu_append(GTK_MENU(menu), button); |
878 gtk_widget_show(button); | 901 gtk_widget_show(button); |
879 } | 902 } |
880 | 903 |
881 /* Added by Jonas <jonas@birme.se> */ | 904 /* Added by Jonas <jonas@birme.se> */ |
882 if (b->gc) { | 905 if (b->gc) { |
883 if (find_buddy(b->gc, gtk_object_get_user_data(obj))) | 906 if (find_buddy(b->gc, who)) |
884 button = gtk_menu_item_new_with_label(_("Remove")); | 907 button = gtk_menu_item_new_with_label(_("Remove")); |
885 else | 908 else |
886 button = gtk_menu_item_new_with_label(_("Add")); | 909 button = gtk_menu_item_new_with_label(_("Add")); |
887 gtk_signal_connect(GTK_OBJECT(button), "activate", | 910 gtk_signal_connect(GTK_OBJECT(button), "activate", |
888 GTK_SIGNAL_FUNC(chat_press_add), b); | 911 GTK_SIGNAL_FUNC(chat_press_add), b); |
889 gtk_object_set_user_data(GTK_OBJECT(button), | 912 gtk_object_set_user_data(GTK_OBJECT(button), |
890 gtk_object_get_user_data(obj)); | 913 who); |
891 gtk_menu_append(GTK_MENU(menu), button); | 914 gtk_menu_append(GTK_MENU(menu), button); |
892 gtk_widget_show(button); | 915 gtk_widget_show(button); |
893 } | 916 } |
894 /* End Jonas */ | 917 /* End Jonas */ |
895 | 918 |
896 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); | 919 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); |
920 | |
897 return TRUE; | 921 return TRUE; |
898 } | 922 } |
923 | |
899 return TRUE; | 924 return TRUE; |
900 } | 925 } |
901 | 926 |
902 /* | 927 /* |
903 * Common code for adding a chat buddy to the list | 928 * Common code for adding a chat buddy to the list |
904 */ | 929 */ |
905 static void add_chat_buddy_common(struct conversation *b, char *name, int pos) | 930 static void add_chat_buddy_common(struct conversation *b, char *name, int pos) |
906 { | 931 { |
907 char tmp[BUF_LONG]; | 932 char tmp[BUF_LONG]; |
908 GtkWidget *list_item; | 933 char ign[1]; |
909 | 934 GtkTreeIter iter; |
910 if (ignored(b, name)) { | 935 GtkListStore *ls; |
911 g_snprintf(tmp, sizeof(tmp), "X %s", name); | 936 |
912 list_item = gtk_list_item_new_with_label(tmp); | 937 |
913 } else | 938 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(b->list))); |
914 list_item = gtk_list_item_new_with_label(name); | 939 |
915 | 940 gtk_list_store_append(ls, &iter); |
916 gtk_object_set_user_data(GTK_OBJECT(list_item), name); | 941 gtk_list_store_set(ls, &iter, 0, ignored(b, name) ? "X" : " ", 1, name, -1); |
917 gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", | 942 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), 1, GTK_SORT_ASCENDING); |
918 GTK_SIGNAL_FUNC(right_click_chat), b); | |
919 gtk_list_insert_items(GTK_LIST(b->list), g_list_append(NULL, list_item), pos); | |
920 gtk_widget_show(list_item); | |
921 } | 943 } |
922 | 944 |
923 void add_chat_buddy(struct conversation *b, char *buddy, char *extra_msg) | 945 void add_chat_buddy(struct conversation *b, char *buddy, char *extra_msg) |
924 { | 946 { |
925 char *name = g_strdup(buddy); | 947 char *name = g_strdup(buddy); |
951 | 973 |
952 | 974 |
953 void rename_chat_buddy(struct conversation *b, char *old, char *new) | 975 void rename_chat_buddy(struct conversation *b, char *old, char *new) |
954 { | 976 { |
955 GList *names = b->in_room; | 977 GList *names = b->in_room; |
956 GList *items = GTK_LIST(b->list)->children; | |
957 | |
958 char *name = g_strdup(new); | 978 char *name = g_strdup(new); |
959 char *ign; | 979 char *ign; |
960 int pos; | 980 int pos; |
961 | |
962 char tmp[BUF_LONG]; | 981 char tmp[BUF_LONG]; |
982 GtkTreeIter iter; | |
983 GtkTreePath *path; | |
984 GtkTreeModel *mod; | |
985 int f = 1; | |
963 | 986 |
964 while (names) { | 987 while (names) { |
965 if (!g_strcasecmp((char *)names->data, old)) { | 988 if (!g_strcasecmp((char *)names->data, old)) { |
966 char *tmp2 = names->data; | 989 char *tmp2 = names->data; |
967 b->in_room = g_list_remove(b->in_room, names->data); | 990 b->in_room = g_list_remove(b->in_room, names->data); |
968 while (items) { | 991 |
969 if (tmp2 == gtk_object_get_user_data(items->data)) { | 992 mod = gtk_tree_view_get_model(GTK_TREE_VIEW(b->list)); |
970 gtk_list_remove_items(GTK_LIST(b->list), | 993 |
971 g_list_append(NULL, items->data)); | 994 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mod), &iter)) |
972 break; | 995 break; |
973 } | 996 |
974 items = items->next; | 997 while (f != 0) { |
998 gchar *val; | |
999 | |
1000 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 1, &val, -1); | |
1001 | |
1002 | |
1003 if (!g_strcasecmp(old, val)) | |
1004 gtk_list_store_remove(GTK_LIST_STORE(mod), &iter); | |
1005 | |
1006 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(mod), &iter); | |
1007 | |
1008 g_free(val); | |
975 } | 1009 } |
1010 | |
976 g_free(tmp2); | 1011 g_free(tmp2); |
977 break; | 1012 break; |
978 } | 1013 } |
979 names = names->next; | 1014 names = names->next; |
980 } | 1015 } |
1017 | 1052 |
1018 | 1053 |
1019 void remove_chat_buddy(struct conversation *b, char *buddy, char *reason) | 1054 void remove_chat_buddy(struct conversation *b, char *buddy, char *reason) |
1020 { | 1055 { |
1021 GList *names = b->in_room; | 1056 GList *names = b->in_room; |
1022 GList *items = GTK_LIST(b->list)->children; | |
1023 | |
1024 char tmp[BUF_LONG]; | 1057 char tmp[BUF_LONG]; |
1058 GtkTreeIter iter; | |
1059 GtkTreePath *path; | |
1060 GtkTreeModel *mod; | |
1061 int f = 1; | |
1062 int i = 0; | |
1025 | 1063 |
1026 plugin_event(event_chat_buddy_leave, b->gc, b->id, buddy); | 1064 plugin_event(event_chat_buddy_leave, b->gc, b->id, buddy); |
1027 | 1065 |
1028 while (names) { | 1066 while (names) { |
1029 if (!g_strcasecmp((char *)names->data, buddy)) { | 1067 if (!g_strcasecmp((char *)names->data, buddy)) { |
1030 char *tmp = names->data; | 1068 char *tmp = names->data; |
1031 b->in_room = g_list_remove(b->in_room, names->data); | 1069 b->in_room = g_list_remove(b->in_room, names->data); |
1032 while (items) { | 1070 |
1033 if (tmp == gtk_object_get_user_data(items->data)) { | 1071 mod = gtk_tree_view_get_model(GTK_TREE_VIEW(b->list)); |
1034 gtk_list_remove_items(GTK_LIST(b->list), | 1072 |
1035 g_list_append(NULL, items->data)); | 1073 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mod), &iter)) |
1036 break; | 1074 break; |
1037 } | 1075 |
1038 items = items->next; | 1076 while (f != 0) { |
1077 gchar *val; | |
1078 | |
1079 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 1, &val, -1); | |
1080 | |
1081 | |
1082 if (!g_strcasecmp(buddy, val)) | |
1083 gtk_list_store_remove(GTK_LIST_STORE(mod), &iter); | |
1084 | |
1085 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(mod), &iter); | |
1086 | |
1087 g_free(val); | |
1039 } | 1088 } |
1040 g_free(tmp); | 1089 |
1041 break; | 1090 break; |
1042 } | 1091 } |
1092 | |
1043 names = names->next; | 1093 names = names->next; |
1044 } | 1094 } |
1045 | 1095 |
1046 if (!names) | 1096 if (!names) |
1047 return; | 1097 return; |
1048 | 1098 |
1049 /* don't remove them from ignored in case they re-enter */ | 1099 /* don't remove them from ignored in case they re-enter */ |
1050 | |
1051 g_snprintf(tmp, sizeof(tmp), _("%d %s in room"), g_list_length(b->in_room), | 1100 g_snprintf(tmp, sizeof(tmp), _("%d %s in room"), g_list_length(b->in_room), |
1052 g_list_length(b->in_room) == 1 ? "person" : "people"); | 1101 g_list_length(b->in_room) == 1 ? "person" : "people"); |
1053 gtk_label_set_text(GTK_LABEL(b->count), tmp); | 1102 gtk_label_set_text(GTK_LABEL(b->count), tmp); |
1054 | 1103 |
1055 if (b->makesound) | 1104 if (b->makesound) |
1065 } | 1114 } |
1066 | 1115 |
1067 | 1116 |
1068 void im_callback(GtkWidget *w, struct conversation *b) | 1117 void im_callback(GtkWidget *w, struct conversation *b) |
1069 { | 1118 { |
1070 char *name; | 1119 gchar *name; |
1071 GList *i; | 1120 GList *i; |
1072 struct conversation *c; | 1121 struct conversation *c; |
1073 | 1122 GtkTreeIter iter; |
1074 i = GTK_LIST(b->list)->selection; | 1123 GtkTreeModel *mod = gtk_tree_view_get_model(GTK_TREE_VIEW(b->list)); |
1075 if (i) { | 1124 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(b->list)); |
1076 name = (char *)gtk_object_get_user_data(GTK_OBJECT(i->data)); | 1125 |
1126 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { | |
1127 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 1, &name, -1); | |
1077 } else { | 1128 } else { |
1078 return; | 1129 return; |
1079 } | 1130 } |
1080 | 1131 |
1081 if (*name == '@') | 1132 if (*name == '@') |
1090 } else { | 1141 } else { |
1091 c = new_conversation(name); | 1142 c = new_conversation(name); |
1092 } | 1143 } |
1093 | 1144 |
1094 set_convo_gc(c, b->gc); | 1145 set_convo_gc(c, b->gc); |
1146 | |
1147 g_free(name); | |
1095 } | 1148 } |
1096 | 1149 |
1097 void ignore_callback(GtkWidget *w, struct conversation *b) | 1150 void ignore_callback(GtkWidget *w, struct conversation *b) |
1098 { | 1151 { |
1152 GtkTreeIter iter; | |
1153 GtkTreeModel *mod = gtk_tree_view_get_model(GTK_TREE_VIEW(b->list)); | |
1154 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(b->list)); | |
1099 char *name; | 1155 char *name; |
1100 GList *i; | |
1101 char *ign; | 1156 char *ign; |
1102 int pos; | 1157 int pos; |
1103 | 1158 |
1104 i = GTK_LIST(b->list)->selection; | 1159 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { |
1105 if (i) { | 1160 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 1, &name, -1); |
1106 name = (char *)gtk_object_get_user_data(GTK_OBJECT(i->data)); | 1161 gtk_list_store_remove(GTK_LIST_STORE(mod), &iter); |
1107 } else { | 1162 } else { |
1108 return; | 1163 return; |
1109 } | 1164 } |
1110 | 1165 |
1111 pos = gtk_list_child_position(GTK_LIST(b->list), i->data); | 1166 pos = g_list_index(b->in_room, name); |
1112 | 1167 |
1113 ign = ignored(b, name); | 1168 ign = ignored(b, name); |
1114 | 1169 |
1115 if (ign) { | 1170 if (ign) { |
1116 g_free(ign); | 1171 g_free(ign); |
1117 b->ignored = g_list_remove(b->ignored, ign); | 1172 b->ignored = g_list_remove(b->ignored, ign); |
1118 } else { | 1173 } else { |
1119 b->ignored = g_list_append(b->ignored, g_strdup(name)); | 1174 b->ignored = g_list_append(b->ignored, g_strdup(name)); |
1120 } | 1175 } |
1121 | 1176 |
1122 gtk_widget_destroy(i->data); | |
1123 add_chat_buddy_common(b, name, pos); | 1177 add_chat_buddy_common(b, name, pos); |
1178 | |
1179 g_free(name); | |
1124 } | 1180 } |
1125 | 1181 |
1126 void show_new_buddy_chat(struct conversation *b) | 1182 void show_new_buddy_chat(struct conversation *b) |
1127 { | 1183 { |
1128 GtkWidget *win; | 1184 GtkWidget *win; |
1129 GtkWidget *cont; | 1185 GtkWidget *cont; |
1130 GtkWidget *text; | 1186 GtkWidget *text; |
1131 GtkWidget *list; | |
1132 /*GtkWidget *close;*/ | |
1133 GtkWidget *chatentry; | 1187 GtkWidget *chatentry; |
1134 GtkWidget *lbox; | 1188 GtkWidget *lbox; |
1135 GtkWidget *bbox; | 1189 GtkWidget *bbox; |
1136 GtkWidget *bbox2; | 1190 GtkWidget *bbox2; |
1137 GtkWidget *button; | 1191 GtkWidget *button; |
1140 GtkWidget *vbox; | 1194 GtkWidget *vbox; |
1141 GtkWidget *vpaned; | 1195 GtkWidget *vpaned; |
1142 GtkWidget *hpaned; | 1196 GtkWidget *hpaned; |
1143 GtkWidget *toolbar; | 1197 GtkWidget *toolbar; |
1144 GtkWidget *sep; | 1198 GtkWidget *sep; |
1199 GtkListStore *ls; | |
1200 GtkWidget *list; | |
1201 GtkCellRenderer *rend; | |
1202 GtkTreeViewColumn *col; | |
1203 GtkTreeSelection *sel; | |
1204 GtkTreeIter *iter; | |
1145 | 1205 |
1146 char buf[BUF_LONG]; | 1206 char buf[BUF_LONG]; |
1147 | 1207 |
1148 /*int dispstyle = set_dispstyle(1);*/ | 1208 /*int dispstyle = set_dispstyle(1);*/ |
1149 | 1209 |
1273 sw2 = gtk_scrolled_window_new(NULL, NULL); | 1333 sw2 = gtk_scrolled_window_new(NULL, NULL); |
1274 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); | 1334 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); |
1275 gtk_box_pack_start(GTK_BOX(lbox), sw2, TRUE, TRUE, 0); | 1335 gtk_box_pack_start(GTK_BOX(lbox), sw2, TRUE, TRUE, 0); |
1276 gtk_widget_show(sw2); | 1336 gtk_widget_show(sw2); |
1277 | 1337 |
1278 list = gtk_list_new(); | 1338 ls = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); |
1339 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), 1, GTK_SORT_ASCENDING); | |
1340 list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); | |
1341 | |
1342 rend = gtk_cell_renderer_text_new(); | |
1343 col = gtk_tree_view_column_new_with_attributes(NULL, rend, "text", 0, NULL); | |
1344 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); | |
1345 gtk_signal_connect(GTK_OBJECT(list), "button_press_event", | |
1346 GTK_SIGNAL_FUNC(right_click_chat), b); | |
1347 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); | |
1348 | |
1349 col = gtk_tree_view_column_new_with_attributes(NULL, rend, "text", 1, NULL); | |
1350 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); | |
1351 gtk_signal_connect(GTK_OBJECT(list), "button_press_event", | |
1352 GTK_SIGNAL_FUNC(right_click_chat), b); | |
1353 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); | |
1354 | |
1355 gtk_widget_set_usize(list, 150, -1); | |
1356 | |
1357 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); | |
1358 gtk_widget_show(list); | |
1279 b->list = list; | 1359 b->list = list; |
1360 | |
1280 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), list); | 1361 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), list); |
1281 gtk_widget_set_usize(list, 150, -1); | |
1282 gtk_widget_show(list); | |
1283 | 1362 |
1284 bbox2 = gtk_hbox_new(TRUE, 5); | 1363 bbox2 = gtk_hbox_new(TRUE, 5); |
1285 gtk_box_pack_start(GTK_BOX(lbox), bbox2, FALSE, FALSE, 0); | 1364 gtk_box_pack_start(GTK_BOX(lbox), bbox2, FALSE, FALSE, 0); |
1286 gtk_widget_show(bbox2); | 1365 gtk_widget_show(bbox2); |
1287 | 1366 |