| 965 if (ui_data == NULL || ui_data->row == NULL) |
958 if (ui_data == NULL || ui_data->row == NULL) |
| 966 return; |
959 return; |
| 967 pidgin_blist_update_buddy(purple_get_blist(), PURPLE_BLIST_NODE(buddy), TRUE); |
960 pidgin_blist_update_buddy(purple_get_blist(), PURPLE_BLIST_NODE(buddy), TRUE); |
| 968 } |
961 } |
| 969 |
962 |
| |
963 static gboolean |
| |
964 chat_account_filter_func(PurpleAccount *account) |
| |
965 { |
| |
966 PurpleConnection *gc = purple_account_get_connection(account); |
| |
967 PurplePluginProtocolInfo *prpl_info = NULL; |
| |
968 |
| |
969 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); |
| |
970 |
| |
971 return (prpl_info->chat_info != NULL); |
| |
972 } |
| |
973 |
| |
974 gboolean |
| |
975 pidgin_blist_joinchat_is_showable() |
| |
976 { |
| |
977 GList *c; |
| |
978 PurpleConnection *gc; |
| |
979 |
| |
980 for (c = purple_connections_get_all(); c != NULL; c = c->next) { |
| |
981 gc = c->data; |
| |
982 |
| |
983 if (chat_account_filter_func(purple_connection_get_account(gc))) |
| |
984 return TRUE; |
| |
985 } |
| |
986 |
| |
987 return FALSE; |
| |
988 } |
| |
989 |
| |
990 static GtkWidget * |
| |
991 make_blist_request_dialog(PidginBlistRequestData *data, PurpleAccount *account, |
| |
992 const char *title, const char *window_role, const char *label_text, |
| |
993 GCallback callback_func, PurpleFilterAccountFunc filter_func, |
| |
994 GCallback response_cb) |
| |
995 { |
| |
996 GtkWidget *label; |
| |
997 GtkWidget *img; |
| |
998 GtkWidget *hbox; |
| |
999 GtkWidget *vbox; |
| |
1000 GtkWindow *blist_window; |
| |
1001 PidginBuddyList *gtkblist; |
| |
1002 |
| |
1003 data->account = account; |
| |
1004 |
| |
1005 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| |
1006 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| |
1007 |
| |
1008 gtkblist = PIDGIN_BLIST(purple_get_blist()); |
| |
1009 blist_window = gtkblist ? GTK_WINDOW(gtkblist->window) : NULL; |
| |
1010 |
| |
1011 data->window = gtk_dialog_new_with_buttons(title, |
| |
1012 blist_window, GTK_DIALOG_NO_SEPARATOR, |
| |
1013 NULL); |
| |
1014 |
| |
1015 gtk_window_set_transient_for(GTK_WINDOW(data->window), blist_window); |
| |
1016 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); |
| |
1017 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); |
| |
1018 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
| |
1019 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); |
| |
1020 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); |
| |
1021 gtk_window_set_role(GTK_WINDOW(data->window), window_role); |
| |
1022 |
| |
1023 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| |
1024 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
| |
1025 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| |
1026 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| |
1027 |
| |
1028 vbox = gtk_vbox_new(FALSE, 5); |
| |
1029 gtk_container_add(GTK_CONTAINER(hbox), vbox); |
| |
1030 |
| |
1031 label = gtk_label_new(label_text); |
| |
1032 |
| |
1033 gtk_widget_set_size_request(label, 400, -1); |
| |
1034 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
| |
1035 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
| |
1036 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
| |
1037 |
| |
1038 data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
| |
1039 |
| |
1040 data->account_menu = pidgin_account_option_menu_new(account, FALSE, |
| |
1041 callback_func, filter_func, data); |
| |
1042 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_ccount"), data->sg, data->account_menu, TRUE, NULL); |
| |
1043 |
| |
1044 data->vbox = GTK_BOX(gtk_vbox_new(FALSE, 5)); |
| |
1045 gtk_container_set_border_width(GTK_CONTAINER(data->vbox), 0); |
| |
1046 gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(data->vbox), FALSE, FALSE, 0); |
| |
1047 |
| |
1048 g_signal_connect(G_OBJECT(data->window), "response", response_cb, data); |
| |
1049 |
| |
1050 g_object_unref(data->sg); |
| |
1051 |
| |
1052 return vbox; |
| |
1053 } |
| |
1054 |
| 970 static void |
1055 static void |
| 971 rebuild_joinchat_entries(PidginJoinChatData *data) |
1056 rebuild_chat_entries(PidginChatData *data, const char *default_chat_name) |
| 972 { |
1057 { |
| 973 PurpleConnection *gc; |
1058 PurpleConnection *gc; |
| 974 GList *list = NULL, *tmp; |
1059 GList *list = NULL, *tmp; |
| 975 GHashTable *defaults = NULL; |
1060 GHashTable *defaults = NULL; |
| 976 struct proto_chat_entry *pce; |
1061 struct proto_chat_entry *pce; |
| 977 gboolean focus = TRUE; |
1062 gboolean focus = TRUE; |
| 978 |
1063 |
| 979 g_return_if_fail(data->account != NULL); |
1064 g_return_if_fail(data->rq_data.account != NULL); |
| 980 |
1065 |
| 981 gc = purple_account_get_connection(data->account); |
1066 gc = purple_account_get_connection(data->rq_data.account); |
| 982 |
1067 |
| 983 gtk_container_foreach(GTK_CONTAINER(data->entries_box), (GtkCallback)gtk_widget_destroy, NULL); |
1068 gtk_container_foreach(GTK_CONTAINER(data->rq_data.vbox), (GtkCallback)gtk_widget_destroy, NULL); |
| 984 |
1069 |
| 985 g_list_free(data->entries); |
1070 g_list_free(data->entries); |
| 986 data->entries = NULL; |
1071 data->entries = NULL; |
| 987 |
1072 |
| 988 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
1073 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
| 989 list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); |
1074 list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); |
| 990 |
1075 |
| 991 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) |
1076 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) |
| 992 defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, NULL); |
1077 defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, default_chat_name); |
| 993 |
1078 |
| 994 for (tmp = list; tmp; tmp = tmp->next) |
1079 for (tmp = list; tmp; tmp = tmp->next) |
| 995 { |
1080 { |
| 996 GtkWidget *input; |
1081 GtkWidget *input; |
| 997 |
1082 |
| 1043 |
1128 |
| 1044 g_list_free(list); |
1129 g_list_free(list); |
| 1045 g_hash_table_destroy(defaults); |
1130 g_hash_table_destroy(defaults); |
| 1046 |
1131 |
| 1047 /* Set whether the "OK" button should be clickable initially */ |
1132 /* Set whether the "OK" button should be clickable initially */ |
| 1048 joinchat_set_sensitive_if_input_cb(NULL, data); |
1133 set_sensitive_if_input_cb(NULL, data); |
| 1049 |
1134 |
| 1050 gtk_widget_show_all(data->entries_box); |
1135 gtk_widget_show_all(GTK_WIDGET(data->rq_data.vbox)); |
| 1051 } |
1136 } |
| 1052 |
1137 |
| 1053 static void |
1138 static void |
| 1054 joinchat_select_account_cb(GObject *w, PurpleAccount *account, |
1139 chat_select_account_cb(GObject *w, PurpleAccount *account, |
| 1055 PidginJoinChatData *data) |
1140 PidginChatData *data) |
| 1056 { |
1141 { |
| 1057 data->account = account; |
1142 if (strcmp(purple_account_get_protocol_id(data->rq_data.account), |
| 1058 rebuild_joinchat_entries(data); |
1143 purple_account_get_protocol_id(account)) == 0) |
| 1059 } |
1144 { |
| 1060 |
1145 data->rq_data.account = account; |
| 1061 static gboolean |
1146 } |
| 1062 chat_account_filter_func(PurpleAccount *account) |
1147 else |
| 1063 { |
1148 { |
| 1064 PurpleConnection *gc = purple_account_get_connection(account); |
1149 data->rq_data.account = account; |
| 1065 PurplePluginProtocolInfo *prpl_info = NULL; |
1150 rebuild_chat_entries(data, data->default_chat_name); |
| 1066 |
1151 } |
| 1067 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
| 1068 |
|
| 1069 return (prpl_info->chat_info != NULL); |
|
| 1070 } |
|
| 1071 |
|
| 1072 gboolean |
|
| 1073 pidgin_blist_joinchat_is_showable() |
|
| 1074 { |
|
| 1075 GList *c; |
|
| 1076 PurpleConnection *gc; |
|
| 1077 |
|
| 1078 for (c = purple_connections_get_all(); c != NULL; c = c->next) { |
|
| 1079 gc = c->data; |
|
| 1080 |
|
| 1081 if (chat_account_filter_func(purple_connection_get_account(gc))) |
|
| 1082 return TRUE; |
|
| 1083 } |
|
| 1084 |
|
| 1085 return FALSE; |
|
| 1086 } |
1152 } |
| 1087 |
1153 |
| 1088 void |
1154 void |
| 1089 pidgin_blist_joinchat_show(void) |
1155 pidgin_blist_joinchat_show(void) |
| 1090 { |
1156 { |
| 1091 GtkWidget *hbox, *vbox; |
1157 PidginChatData *data = NULL; |
| 1092 GtkWidget *label; |
1158 |
| 1093 PidginBuddyList *gtkblist; |
1159 data = g_new0(PidginChatData, 1); |
| 1094 GtkWidget *img = NULL; |
1160 |
| 1095 PidginJoinChatData *data = NULL; |
1161 make_blist_request_dialog((PidginBlistRequestData *)data, NULL, |
| 1096 |
1162 _("Join a Chat"), "join_chat", |
| 1097 gtkblist = purple_blist_get_ui_data(); |
1163 _("Please enter the appropriate information about the chat " |
| 1098 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
1164 "you would like to join.\n"), |
| 1099 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
1165 G_CALLBACK(chat_select_account_cb), |
| 1100 data = g_new0(PidginJoinChatData, 1); |
1166 chat_account_filter_func, (GCallback)do_joinchat); |
| 1101 |
1167 gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window), |
| 1102 data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), |
|
| 1103 NULL, GTK_DIALOG_NO_SEPARATOR, |
|
| 1104 _("Room _List"), 1, |
1168 _("Room _List"), 1, |
| 1105 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
1169 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 1106 PIDGIN_STOCK_CHAT, GTK_RESPONSE_OK, NULL); |
1170 PIDGIN_STOCK_CHAT, GTK_RESPONSE_OK, NULL); |
| 1107 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); |
1171 data->default_chat_name = NULL; |
| 1108 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); |
1172 data->rq_data.account = pidgin_account_option_menu_get_selected(data->rq_data.account_menu); |
| 1109 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
1173 |
| 1110 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); |
1174 rebuild_chat_entries(data, NULL); |
| 1111 gtk_container_set_border_width( |
1175 |
| 1112 GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); |
1176 gtk_widget_show_all(data->rq_data.window); |
| 1113 gtk_window_set_role(GTK_WINDOW(data->window), "join_chat"); |
|
| 1114 |
|
| 1115 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
|
| 1116 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
|
| 1117 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
|
| 1118 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
|
| 1119 |
|
| 1120 vbox = gtk_vbox_new(FALSE, 5); |
|
| 1121 gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); |
|
| 1122 gtk_container_add(GTK_CONTAINER(hbox), vbox); |
|
| 1123 |
|
| 1124 label = gtk_label_new(_("Please enter the appropriate information " |
|
| 1125 "about the chat you would like to join.\n")); |
|
| 1126 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
|
| 1127 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
|
| 1128 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
|
| 1129 |
|
| 1130 data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
|
| 1131 |
|
| 1132 data->account_menu = pidgin_account_option_menu_new(NULL, FALSE, |
|
| 1133 G_CALLBACK(joinchat_select_account_cb), |
|
| 1134 chat_account_filter_func, data); |
|
| 1135 |
|
| 1136 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Account:"), data->sg, data->account_menu, TRUE, NULL); |
|
| 1137 |
|
| 1138 data->entries_box = gtk_vbox_new(FALSE, 5); |
|
| 1139 gtk_container_add(GTK_CONTAINER(vbox), data->entries_box); |
|
| 1140 gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); |
|
| 1141 |
|
| 1142 data->account = pidgin_account_option_menu_get_selected(data->account_menu); |
|
| 1143 |
|
| 1144 rebuild_joinchat_entries(data); |
|
| 1145 |
|
| 1146 g_signal_connect(G_OBJECT(data->window), "response", |
|
| 1147 G_CALLBACK(do_joinchat), data); |
|
| 1148 |
|
| 1149 g_object_unref(data->sg); |
|
| 1150 |
|
| 1151 gtk_widget_show_all(data->window); |
|
| 1152 } |
1177 } |
| 1153 |
1178 |
| 1154 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) |
1179 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) |
| 1155 { |
1180 { |
| 1156 PurpleBlistNode *node; |
1181 PurpleBlistNode *node; |
| 6757 who = gtk_entry_get_text(GTK_ENTRY(data->entry)); |
6783 who = gtk_entry_get_text(GTK_ENTRY(data->entry)); |
| 6758 grp = pidgin_text_combo_box_entry_get_text(data->combo); |
6784 grp = pidgin_text_combo_box_entry_get_text(data->combo); |
| 6759 whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias)); |
6785 whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias)); |
| 6760 if (*whoalias == '\0') |
6786 if (*whoalias == '\0') |
| 6761 whoalias = NULL; |
6787 whoalias = NULL; |
| |
6788 |
| |
6789 account = data->rq_data.account; |
| 6762 |
6790 |
| 6763 g = NULL; |
6791 g = NULL; |
| 6764 if ((grp != NULL) && (*grp != '\0')) |
6792 if ((grp != NULL) && (*grp != '\0')) |
| 6765 { |
6793 { |
| 6766 if ((g = purple_find_group(grp)) == NULL) |
6794 if ((g = purple_find_group(grp)) == NULL) |
| 6767 { |
6795 { |
| 6768 g = purple_group_new(grp); |
6796 g = purple_group_new(grp); |
| 6769 purple_blist_add_group(g, NULL); |
6797 purple_blist_add_group(g, NULL); |
| 6770 } |
6798 } |
| 6771 |
6799 |
| 6772 b = purple_find_buddy_in_group(data->account, who, g); |
6800 b = purple_find_buddy_in_group(account, who, g); |
| 6773 } |
6801 } |
| 6774 else if ((b = purple_find_buddy(data->account, who)) != NULL) |
6802 else if ((b = purple_find_buddy(account, who)) != NULL) |
| 6775 { |
6803 { |
| 6776 g = purple_buddy_get_group(b); |
6804 g = purple_buddy_get_group(b); |
| 6777 } |
6805 } |
| 6778 |
6806 |
| 6779 if (b == NULL) |
6807 if (b == NULL) |
| 6780 { |
6808 { |
| 6781 b = purple_buddy_new(data->account, who, whoalias); |
6809 b = purple_buddy_new(account, who, whoalias); |
| 6782 purple_blist_add_buddy(b, NULL, g, NULL); |
6810 purple_blist_add_buddy(b, NULL, g, NULL); |
| 6783 } |
6811 } |
| 6784 |
6812 |
| 6785 purple_account_add_buddy(data->account, b); |
6813 purple_account_add_buddy(account, b); |
| 6786 |
6814 |
| 6787 /* Offer to merge people with the same alias. */ |
6815 /* Offer to merge people with the same alias. */ |
| 6788 if (whoalias != NULL && g != NULL) |
6816 if (whoalias != NULL && g != NULL) |
| 6789 gtk_blist_auto_personize((PurpleBlistNode *)g, whoalias); |
6817 gtk_blist_auto_personize((PurpleBlistNode *)g, whoalias); |
| 6790 |
6818 |
| 6801 * local list. We need a new, non-gtk file that calls both |
6829 * local list. We need a new, non-gtk file that calls both |
| 6802 * purple_account_add_buddy and purple_blist_add_buddy(). |
6830 * purple_account_add_buddy and purple_blist_add_buddy(). |
| 6803 * Or something. --Mark |
6831 * Or something. --Mark |
| 6804 */ |
6832 */ |
| 6805 |
6833 |
| 6806 c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, data->account); |
6834 c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, data->rq_data.account); |
| 6807 if (c != NULL) { |
6835 if (c != NULL) { |
| 6808 icon = purple_conv_im_get_icon(PURPLE_CONV_IM(c)); |
6836 icon = purple_conv_im_get_icon(PURPLE_CONV_IM(c)); |
| 6809 if (icon != NULL) |
6837 if (icon != NULL) |
| 6810 purple_buddy_icon_update(icon); |
6838 purple_buddy_icon_update(icon); |
| 6811 } |
6839 } |
| 6812 } |
6840 } |
| 6813 |
6841 |
| 6814 gtk_widget_destroy(data->window); |
6842 gtk_widget_destroy(data->rq_data.window); |
| 6815 } |
6843 } |
| 6816 |
6844 |
| 6817 static void |
6845 static void |
| 6818 pidgin_blist_request_add_buddy(PurpleAccount *account, const char *username, |
6846 pidgin_blist_request_add_buddy(PurpleAccount *account, const char *username, |
| 6819 const char *group, const char *alias) |
6847 const char *group, const char *alias) |
| 6820 { |
6848 { |
| 6821 GtkWidget *table; |
|
| 6822 GtkWidget *label; |
|
| 6823 GtkWidget *hbox; |
|
| 6824 GtkWidget *vbox; |
|
| 6825 GtkWidget *img; |
|
| 6826 PidginBuddyList *gtkblist; |
|
| 6827 PidginAddBuddyData *data = g_new0(PidginAddBuddyData, 1); |
6849 PidginAddBuddyData *data = g_new0(PidginAddBuddyData, 1); |
| 6828 |
6850 |
| 6829 data->account = |
6851 make_blist_request_dialog((PidginBlistRequestData *)data, |
| 6830 (account != NULL |
6852 (account != NULL |
| 6831 ? account |
6853 ? account : purple_connection_get_account(purple_connections_get_all()->data)), |
| 6832 : purple_connection_get_account(purple_connections_get_all()->data)); |
6854 _("Add Buddy"), "add_buddy", |
| 6833 |
6855 _("Add a buddy.\n"), |
| 6834 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
6856 G_CALLBACK(add_buddy_select_account_cb), NULL, |
| 6835 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
6857 G_CALLBACK(add_buddy_cb)); |
| 6836 |
6858 gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window), |
| 6837 gtkblist = PIDGIN_BLIST(purple_get_blist()); |
|
| 6838 |
|
| 6839 data->window = gtk_dialog_new_with_buttons(_("Add Buddy"), |
|
| 6840 gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR, |
|
| 6841 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
6859 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 6842 GTK_STOCK_ADD, GTK_RESPONSE_OK, |
6860 GTK_STOCK_ADD, GTK_RESPONSE_OK, |
| 6843 NULL); |
6861 NULL); |
| 6844 |
6862 |
| 6845 if (gtkblist) |
6863 g_signal_connect(G_OBJECT(data->rq_data.window), "destroy", |
| 6846 gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window)); |
|
| 6847 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); |
|
| 6848 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); |
|
| 6849 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
|
| 6850 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); |
|
| 6851 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); |
|
| 6852 gtk_window_set_role(GTK_WINDOW(data->window), "add_buddy"); |
|
| 6853 gtk_window_set_type_hint(GTK_WINDOW(data->window), |
|
| 6854 GDK_WINDOW_TYPE_HINT_DIALOG); |
|
| 6855 |
|
| 6856 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
|
| 6857 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
|
| 6858 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
|
| 6859 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
|
| 6860 |
|
| 6861 vbox = gtk_vbox_new(FALSE, 0); |
|
| 6862 gtk_container_add(GTK_CONTAINER(hbox), vbox); |
|
| 6863 |
|
| 6864 g_signal_connect(G_OBJECT(data->window), "destroy", |
|
| 6865 G_CALLBACK(destroy_add_buddy_dialog_cb), data); |
6864 G_CALLBACK(destroy_add_buddy_dialog_cb), data); |
| 6866 |
6865 |
| 6867 label = gtk_label_new(_("Add a buddy.\n")); |
|
| 6868 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
|
| 6869 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
|
| 6870 |
|
| 6871 table = gtk_table_new(4, 2, FALSE); |
|
| 6872 gtk_table_set_row_spacings(GTK_TABLE(table), 5); |
|
| 6873 gtk_table_set_col_spacings(GTK_TABLE(table), 5); |
|
| 6874 gtk_container_set_border_width(GTK_CONTAINER(table), 0); |
|
| 6875 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); |
|
| 6876 |
|
| 6877 data->account_box = pidgin_account_option_menu_new(account, FALSE, |
|
| 6878 G_CALLBACK(add_buddy_select_account_cb), NULL, data); |
|
| 6879 |
|
| 6880 gtk_table_attach_defaults(GTK_TABLE(table), data->account_box, 0, 2, 0, 1); |
|
| 6881 |
|
| 6882 label = gtk_label_new_with_mnemonic(_("Buddy's _username:")); |
|
| 6883 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
| 6884 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); |
|
| 6885 |
|
| 6886 data->entry = gtk_entry_new(); |
6866 data->entry = gtk_entry_new(); |
| 6887 gtk_table_attach_defaults(GTK_TABLE(table), data->entry, 1, 2, 1, 2); |
6867 |
| |
6868 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Buddy's _username:"), |
| |
6869 data->rq_data.sg, data->entry, TRUE, NULL); |
| 6888 gtk_widget_grab_focus(data->entry); |
6870 gtk_widget_grab_focus(data->entry); |
| 6889 |
6871 |
| 6890 if (username != NULL) |
6872 if (username != NULL) |
| 6891 gtk_entry_set_text(GTK_ENTRY(data->entry), username); |
6873 gtk_entry_set_text(GTK_ENTRY(data->entry), username); |
| 6892 else |
6874 else |
| 6893 gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), |
6875 gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), |
| 6894 GTK_RESPONSE_OK, FALSE); |
6876 GTK_RESPONSE_OK, FALSE); |
| 6895 |
6877 |
| 6896 gtk_entry_set_activates_default (GTK_ENTRY(data->entry), TRUE); |
6878 gtk_entry_set_activates_default (GTK_ENTRY(data->entry), TRUE); |
| 6897 gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry); |
|
| 6898 pidgin_set_accessible_label (data->entry, label); |
|
| 6899 |
6879 |
| 6900 g_signal_connect(G_OBJECT(data->entry), "changed", |
6880 g_signal_connect(G_OBJECT(data->entry), "changed", |
| 6901 G_CALLBACK(pidgin_set_sensitive_if_input), |
6881 G_CALLBACK(pidgin_set_sensitive_if_input), |
| 6902 data->window); |
6882 data->rq_data.window); |
| 6903 |
|
| 6904 label = gtk_label_new_with_mnemonic(_("(Optional) A_lias:")); |
|
| 6905 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
| 6906 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); |
|
| 6907 |
6883 |
| 6908 data->entry_for_alias = gtk_entry_new(); |
6884 data->entry_for_alias = gtk_entry_new(); |
| 6909 gtk_table_attach_defaults(GTK_TABLE(table), |
6885 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("(Optional) A_lias:"), |
| 6910 data->entry_for_alias, 1, 2, 2, 3); |
6886 data->rq_data.sg, data->entry_for_alias, TRUE, |
| |
6887 NULL); |
| 6911 |
6888 |
| 6912 if (alias != NULL) |
6889 if (alias != NULL) |
| 6913 gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); |
6890 gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); |
| 6914 |
6891 |
| 6915 if (username != NULL) |
6892 if (username != NULL) |
| 6916 gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias)); |
6893 gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias)); |
| 6917 |
6894 |
| 6918 gtk_entry_set_activates_default (GTK_ENTRY(data->entry_for_alias), TRUE); |
|
| 6919 gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry_for_alias); |
|
| 6920 pidgin_set_accessible_label (data->entry_for_alias, label); |
|
| 6921 |
|
| 6922 label = gtk_label_new_with_mnemonic(_("Add buddy to _group:")); |
|
| 6923 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
| 6924 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); |
|
| 6925 |
|
| 6926 data->combo = pidgin_text_combo_box_entry_new(group, groups_tree()); |
6895 data->combo = pidgin_text_combo_box_entry_new(group, groups_tree()); |
| 6927 gtk_table_attach_defaults(GTK_TABLE(table), data->combo, 1, 2, 3, 4); |
6896 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Add buddy to _group:"), |
| 6928 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_BIN(data->combo)->child); |
6897 data->rq_data.sg, data->combo, TRUE, NULL); |
| 6929 pidgin_set_accessible_label (data->combo, label); |
6898 |
| 6930 |
6899 gtk_widget_show_all(data->rq_data.window); |
| 6931 g_signal_connect(G_OBJECT(data->window), "response", |
|
| 6932 G_CALLBACK(add_buddy_cb), data); |
|
| 6933 |
|
| 6934 gtk_widget_show_all(data->window); |
|
| 6935 } |
6900 } |
| 6936 |
6901 |
| 6937 static void |
6902 static void |
| 6938 add_chat_cb(GtkWidget *w, PidginAddChatData *data) |
6903 add_chat_cb(GtkWidget *w, PidginAddChatData *data) |
| 6939 { |
6904 { |
| 7003 { |
6968 { |
| 7004 add_chat_cb(NULL, data); |
6969 add_chat_cb(NULL, data); |
| 7005 } |
6970 } |
| 7006 else if (resp == 1) |
6971 else if (resp == 1) |
| 7007 { |
6972 { |
| 7008 pidgin_roomlist_dialog_show_with_account(data->account); |
6973 pidgin_roomlist_dialog_show_with_account(data->chat_data.rq_data.account); |
| 7009 } |
6974 } |
| 7010 else |
6975 else |
| 7011 { |
6976 { |
| 7012 gtk_widget_destroy(data->window); |
6977 gtk_widget_destroy(data->chat_data.rq_data.window); |
| 7013 g_free(data->default_chat_name); |
6978 g_free(data->chat_data.default_chat_name); |
| 7014 g_list_free(data->entries); |
6979 g_list_free(data->chat_data.entries); |
| 7015 g_free(data); |
6980 g_free(data); |
| 7016 } |
|
| 7017 } |
|
| 7018 |
|
| 7019 /* |
|
| 7020 * Check the values of all the text entry boxes. If any required input |
|
| 7021 * strings are empty then don't allow the user to click on "OK." |
|
| 7022 */ |
|
| 7023 static void |
|
| 7024 addchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) |
|
| 7025 { |
|
| 7026 PurplePluginProtocolInfo *prpl_info; |
|
| 7027 PurpleConnection *gc; |
|
| 7028 PidginAddChatData *data; |
|
| 7029 GList *tmp; |
|
| 7030 const char *text; |
|
| 7031 gboolean required; |
|
| 7032 gboolean sensitive = TRUE; |
|
| 7033 |
|
| 7034 data = user_data; |
|
| 7035 |
|
| 7036 for (tmp = data->entries; tmp != NULL; tmp = tmp->next) |
|
| 7037 { |
|
| 7038 if (!g_object_get_data(tmp->data, "is_spin")) |
|
| 7039 { |
|
| 7040 required = GPOINTER_TO_INT(g_object_get_data(tmp->data, "required")); |
|
| 7041 text = gtk_entry_get_text(tmp->data); |
|
| 7042 if (required && (*text == '\0')) |
|
| 7043 sensitive = FALSE; |
|
| 7044 } |
|
| 7045 } |
|
| 7046 |
|
| 7047 gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_OK, sensitive); |
|
| 7048 |
|
| 7049 gc = purple_account_get_connection(data->account); |
|
| 7050 prpl_info = (gc != NULL) ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL; |
|
| 7051 sensitive = (prpl_info != NULL && prpl_info->roomlist_get_list != NULL); |
|
| 7052 |
|
| 7053 gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), 1, sensitive); |
|
| 7054 } |
|
| 7055 |
|
| 7056 static void |
|
| 7057 rebuild_addchat_entries(PidginAddChatData *data) |
|
| 7058 { |
|
| 7059 PurpleConnection *gc; |
|
| 7060 GList *list = NULL, *tmp; |
|
| 7061 GHashTable *defaults = NULL; |
|
| 7062 struct proto_chat_entry *pce; |
|
| 7063 gboolean focus = TRUE; |
|
| 7064 |
|
| 7065 g_return_if_fail(data->account != NULL); |
|
| 7066 |
|
| 7067 gc = purple_account_get_connection(data->account); |
|
| 7068 |
|
| 7069 gtk_container_foreach(GTK_CONTAINER(data->entries_box), (GtkCallback)gtk_widget_destroy, NULL); |
|
| 7070 |
|
| 7071 g_list_free(data->entries); |
|
| 7072 |
|
| 7073 data->entries = NULL; |
|
| 7074 |
|
| 7075 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
|
| 7076 list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); |
|
| 7077 |
|
| 7078 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) |
|
| 7079 defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, data->default_chat_name); |
|
| 7080 |
|
| 7081 for (tmp = list; tmp; tmp = tmp->next) |
|
| 7082 { |
|
| 7083 GtkWidget *input; |
|
| 7084 |
|
| 7085 pce = tmp->data; |
|
| 7086 |
|
| 7087 if (pce->is_int) |
|
| 7088 { |
|
| 7089 GtkObject *adjust; |
|
| 7090 adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, |
|
| 7091 1, 10, 10); |
|
| 7092 input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); |
|
| 7093 gtk_widget_set_size_request(input, 50, -1); |
|
| 7094 pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, FALSE, NULL); |
|
| 7095 } |
|
| 7096 else |
|
| 7097 { |
|
| 7098 char *value; |
|
| 7099 input = gtk_entry_new(); |
|
| 7100 gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); |
|
| 7101 value = g_hash_table_lookup(defaults, pce->identifier); |
|
| 7102 if (value != NULL) |
|
| 7103 gtk_entry_set_text(GTK_ENTRY(input), value); |
|
| 7104 if (pce->secret) |
|
| 7105 { |
|
| 7106 gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); |
|
| 7107 #if !GTK_CHECK_VERSION(2,16,0) |
|
| 7108 if (gtk_entry_get_invisible_char(GTK_ENTRY(input)) == '*') |
|
| 7109 gtk_entry_set_invisible_char(GTK_ENTRY(input), PIDGIN_INVISIBLE_CHAR); |
|
| 7110 #endif /* Less than GTK+ 2.16 */ |
|
| 7111 } |
|
| 7112 pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, TRUE, NULL); |
|
| 7113 g_signal_connect(G_OBJECT(input), "changed", |
|
| 7114 G_CALLBACK(addchat_set_sensitive_if_input_cb), data); |
|
| 7115 } |
|
| 7116 |
|
| 7117 /* Do the following for any type of input widget */ |
|
| 7118 if (focus) |
|
| 7119 { |
|
| 7120 gtk_widget_grab_focus(input); |
|
| 7121 focus = FALSE; |
|
| 7122 } |
|
| 7123 g_object_set_data(G_OBJECT(input), "identifier", (gpointer)pce->identifier); |
|
| 7124 g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); |
|
| 7125 g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); |
|
| 7126 data->entries = g_list_append(data->entries, input); |
|
| 7127 |
|
| 7128 g_free(pce); |
|
| 7129 } |
|
| 7130 |
|
| 7131 g_list_free(list); |
|
| 7132 g_hash_table_destroy(defaults); |
|
| 7133 |
|
| 7134 /* Set whether the "OK" button should be clickable initially */ |
|
| 7135 addchat_set_sensitive_if_input_cb(NULL, data); |
|
| 7136 |
|
| 7137 gtk_widget_show_all(data->entries_box); |
|
| 7138 } |
|
| 7139 |
|
| 7140 static void |
|
| 7141 addchat_select_account_cb(GObject *w, PurpleAccount *account, |
|
| 7142 PidginAddChatData *data) |
|
| 7143 { |
|
| 7144 if (strcmp(purple_account_get_protocol_id(data->account), |
|
| 7145 purple_account_get_protocol_id(account)) == 0) |
|
| 7146 { |
|
| 7147 data->account = account; |
|
| 7148 } |
|
| 7149 else |
|
| 7150 { |
|
| 7151 data->account = account; |
|
| 7152 rebuild_addchat_entries(data); |
|
| 7153 } |
6981 } |
| 7154 } |
6982 } |
| 7155 |
6983 |
| 7156 static void |
6984 static void |
| 7157 pidgin_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, |
6985 pidgin_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, |
| 7158 const char *alias, const char *name) |
6986 const char *alias, const char *name) |
| 7159 { |
6987 { |
| 7160 PidginAddChatData *data; |
6988 PidginAddChatData *data; |
| 7161 PidginBuddyList *gtkblist; |
|
| 7162 GList *l; |
6989 GList *l; |
| 7163 PurpleConnection *gc; |
6990 PurpleConnection *gc; |
| 7164 GtkWidget *label; |
6991 GtkBox *vbox; |
| 7165 GtkWidget *hbox; |
|
| 7166 GtkWidget *vbox; |
|
| 7167 GtkWidget *img; |
|
| 7168 |
6992 |
| 7169 if (account != NULL) { |
6993 if (account != NULL) { |
| 7170 gc = purple_account_get_connection(account); |
6994 gc = purple_account_get_connection(account); |
| 7171 |
6995 |
| 7172 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat == NULL) { |
6996 if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat == NULL) { |
| 7191 return; |
7015 return; |
| 7192 } |
7016 } |
| 7193 } |
7017 } |
| 7194 |
7018 |
| 7195 data = g_new0(PidginAddChatData, 1); |
7019 data = g_new0(PidginAddChatData, 1); |
| 7196 data->account = account; |
7020 vbox = GTK_BOX(make_blist_request_dialog((PidginBlistRequestData *)data, account, |
| 7197 data->default_chat_name = g_strdup(name); |
7021 _("Add Chat"), "add_chat", |
| 7198 |
7022 _("Please enter an alias, and the appropriate information " |
| 7199 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
7023 "about the chat you would like to add to your buddy list.\n"), |
| 7200 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
7024 G_CALLBACK(chat_select_account_cb), chat_account_filter_func, |
| 7201 |
7025 G_CALLBACK(add_chat_resp_cb))); |
| 7202 gtkblist = PIDGIN_BLIST(purple_get_blist()); |
7026 gtk_dialog_add_buttons(GTK_DIALOG(data->chat_data.rq_data.window), |
| 7203 |
7027 _("Room List"), 1, |
| 7204 data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
|
| 7205 |
|
| 7206 data->window = gtk_dialog_new_with_buttons(_("Add Chat"), |
|
| 7207 gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR, |
|
| 7208 _("Room _List"), 1, |
|
| 7209 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
7028 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 7210 GTK_STOCK_ADD, GTK_RESPONSE_OK, |
7029 GTK_STOCK_ADD, GTK_RESPONSE_OK, |
| 7211 NULL); |
7030 NULL); |
| 7212 |
7031 |
| 7213 if (gtkblist) |
7032 data->chat_data.default_chat_name = g_strdup(name); |
| 7214 gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window)); |
7033 |
| 7215 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); |
7034 rebuild_chat_entries((PidginChatData *)data, name); |
| 7216 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); |
|
| 7217 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
|
| 7218 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); |
|
| 7219 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); |
|
| 7220 gtk_window_set_role(GTK_WINDOW(data->window), "add_chat"); |
|
| 7221 gtk_window_set_type_hint(GTK_WINDOW(data->window), |
|
| 7222 GDK_WINDOW_TYPE_HINT_DIALOG); |
|
| 7223 |
|
| 7224 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
|
| 7225 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
|
| 7226 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
|
| 7227 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
|
| 7228 |
|
| 7229 vbox = gtk_vbox_new(FALSE, 5); |
|
| 7230 gtk_container_add(GTK_CONTAINER(hbox), vbox); |
|
| 7231 |
|
| 7232 label = gtk_label_new( |
|
| 7233 _("Please enter an alias, and the appropriate information " |
|
| 7234 "about the chat you would like to add to your buddy list.\n")); |
|
| 7235 gtk_widget_set_size_request(label, 400, -1); |
|
| 7236 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
|
| 7237 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
|
| 7238 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
|
| 7239 |
|
| 7240 data->account_menu = pidgin_account_option_menu_new(account, FALSE, |
|
| 7241 G_CALLBACK(addchat_select_account_cb), |
|
| 7242 chat_account_filter_func, data); |
|
| 7243 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Account:"), data->sg, data->account_menu, TRUE, NULL); |
|
| 7244 |
|
| 7245 data->entries_box = gtk_vbox_new(FALSE, 5); |
|
| 7246 gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); |
|
| 7247 gtk_box_pack_start(GTK_BOX(vbox), data->entries_box, TRUE, TRUE, 0); |
|
| 7248 |
|
| 7249 rebuild_addchat_entries(data); |
|
| 7250 |
7035 |
| 7251 data->alias_entry = gtk_entry_new(); |
7036 data->alias_entry = gtk_entry_new(); |
| 7252 if (alias != NULL) |
7037 if (alias != NULL) |
| 7253 gtk_entry_set_text(GTK_ENTRY(data->alias_entry), alias); |
7038 gtk_entry_set_text(GTK_ENTRY(data->alias_entry), alias); |
| 7254 gtk_entry_set_activates_default(GTK_ENTRY(data->alias_entry), TRUE); |
7039 gtk_entry_set_activates_default(GTK_ENTRY(data->alias_entry), TRUE); |
| 7255 |
7040 |
| 7256 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_lias:"), data->sg, data->alias_entry, TRUE, NULL); |
7041 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_lias:"), |
| |
7042 data->chat_data.rq_data.sg, data->alias_entry, |
| |
7043 TRUE, NULL); |
| 7257 if (name != NULL) |
7044 if (name != NULL) |
| 7258 gtk_widget_grab_focus(data->alias_entry); |
7045 gtk_widget_grab_focus(data->alias_entry); |
| 7259 |
7046 |
| 7260 data->group_combo = pidgin_text_combo_box_entry_new(group ? group->name : NULL, groups_tree()); |
7047 data->group_combo = pidgin_text_combo_box_entry_new(group ? group->name : NULL, groups_tree()); |
| 7261 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Group:"), data->sg, data->group_combo, TRUE, NULL); |
7048 pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Group:"), |
| |
7049 data->chat_data.rq_data.sg, data->group_combo, |
| |
7050 TRUE, NULL); |
| 7262 |
7051 |
| 7263 data->autojoin = gtk_check_button_new_with_mnemonic(_("Auto_join when account becomes online.")); |
7052 data->autojoin = gtk_check_button_new_with_mnemonic(_("Auto_join when account becomes online.")); |
| 7264 data->persistent = gtk_check_button_new_with_mnemonic(_("_Remain in chat after window is closed.")); |
7053 data->persistent = gtk_check_button_new_with_mnemonic(_("_Remain in chat after window is closed.")); |
| 7265 gtk_box_pack_start(GTK_BOX(vbox), data->autojoin, FALSE, FALSE, 0); |
7054 gtk_box_pack_start(GTK_BOX(vbox), data->autojoin, FALSE, FALSE, 0); |
| 7266 gtk_box_pack_start(GTK_BOX(vbox), data->persistent, FALSE, FALSE, 0); |
7055 gtk_box_pack_start(GTK_BOX(vbox), data->persistent, FALSE, FALSE, 0); |
| 7267 |
7056 |
| 7268 g_signal_connect(G_OBJECT(data->window), "response", |
7057 gtk_widget_show_all(data->chat_data.rq_data.window); |
| 7269 G_CALLBACK(add_chat_resp_cb), data); |
|
| 7270 |
|
| 7271 gtk_widget_show_all(data->window); |
|
| 7272 } |
7058 } |
| 7273 |
7059 |
| 7274 static void |
7060 static void |
| 7275 add_group_cb(PurpleConnection *gc, const char *group_name) |
7061 add_group_cb(PurpleConnection *gc, const char *group_name) |
| 7276 { |
7062 { |