| 964 | | chat_save(gpointer _cw, guint action, GtkWidget *widget) |
| 965 | | { |
| 966 | | GtkWidget *dlg_save_chat = gtk_file_selection_new("Licq - Save Chat"); |
| 967 | | |
| 968 | | // Connect the signals |
| 969 | | g_signal_connect( |
| 970 | | G_OBJECT(GTK_FILE_SELECTION(dlg_save_chat)->ok_button), |
| 971 | | "clicked", GTK_SIGNAL_FUNC(save_chat_ok), |
| 972 | | _cw); |
| 973 | | g_signal_connect( |
| 974 | | G_OBJECT(GTK_FILE_SELECTION(dlg_save_chat)->cancel_button), |
| 975 | | "clicked", G_CALLBACK(save_chat_cancel), |
| 976 | | 0); |
| 977 | | g_signal_connect(G_OBJECT(dlg_save_chat), "delete_event", |
| 978 | | G_CALLBACK(save_chat_cancel), 0); |
| 979 | | |
| 980 | | gtk_widget_show_all(dlg_save_chat); |
| 981 | | } |
| 982 | | |
| 983 | | void save_chat_ok(GtkWidget *widget, gpointer _cw) |
| 984 | | { |
| 985 | | } |
| 986 | | |
| 987 | | void save_chat_cancel(GtkWidget *widget, gpointer data) |
| 988 | | { |
| | 987 | chat_save(struct chat_window *cw, guint action, GtkWidget *widget) |
| | 988 | { |
| | 989 | GtkWidget *file_sel = gtk_file_selection_new("Licq - Save Chat"); |
| | 990 | |
| | 991 | FILE *fo = NULL; |
| | 992 | while (fo == NULL) { |
| | 993 | int response = gtk_dialog_run(GTK_DIALOG(file_sel)); |
| | 994 | if (response != GTK_RESPONSE_OK) |
| | 995 | break; |
| | 996 | const char *file_name = |
| | 997 | gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_sel)); |
| | 998 | if (g_file_test(file_name, G_FILE_TEST_EXISTS)) { |
| | 999 | if (!g_file_test(file_name, G_FILE_TEST_IS_DIR)) { |
| | 1000 | GtkWidget *msg = |
| | 1001 | gtk_message_dialog_new(GTK_WINDOW(file_sel), |
| | 1002 | GTK_DIALOG_DESTROY_WITH_PARENT, |
| | 1003 | GTK_MESSAGE_QUESTION, |
| | 1004 | GTK_BUTTONS_YES_NO, |
| | 1005 | "File %s already exists, overwrite?", |
| | 1006 | file_name); |
| | 1007 | if (gtk_dialog_run(GTK_DIALOG(msg)) == GTK_RESPONSE_YES) { |
| | 1008 | fo = fopen(file_name, "wt"); |
| | 1009 | gtk_widget_destroy(msg); |
| | 1010 | } |
| | 1011 | else { |
| | 1012 | gtk_widget_destroy(msg); |
| | 1013 | continue; |
| | 1014 | } |
| | 1015 | } |
| | 1016 | else { |
| | 1017 | GtkWidget *msg = |
| | 1018 | gtk_message_dialog_new(GTK_WINDOW(file_sel), |
| | 1019 | GTK_DIALOG_DESTROY_WITH_PARENT, |
| | 1020 | GTK_MESSAGE_ERROR, |
| | 1021 | GTK_BUTTONS_CLOSE, |
| | 1022 | "Invalid selection, %s is a directory", |
| | 1023 | file_name); |
| | 1024 | gtk_dialog_run(GTK_DIALOG(msg)); |
| | 1025 | gtk_widget_destroy(msg); |
| | 1026 | continue; |
| | 1027 | } |
| | 1028 | } |
| | 1029 | else |
| | 1030 | fo = fopen(file_name, "wt"); |
| | 1031 | if (fo == NULL) { |
| | 1032 | GtkWidget *msg = |
| | 1033 | gtk_message_dialog_new(GTK_WINDOW(file_sel), |
| | 1034 | GTK_DIALOG_DESTROY_WITH_PARENT, |
| | 1035 | GTK_MESSAGE_ERROR, |
| | 1036 | GTK_BUTTONS_CLOSE, |
| | 1037 | "Couldn't open %s for writing", |
| | 1038 | file_name); |
| | 1039 | gtk_dialog_run(GTK_DIALOG(msg)); |
| | 1040 | gtk_widget_destroy(msg); |
| | 1041 | } |
| | 1042 | } |
| | 1043 | |
| | 1044 | if (fo != NULL) { |
| | 1045 | string txt(textview_get_chars(cw->text_irc)); |
| | 1046 | fwrite(txt.c_str(), 1, txt.size(), fo); |
| | 1047 | fclose(fo); |
| | 1048 | } |
| | 1049 | gtk_widget_destroy(GTK_WIDGET(file_sel)); |