diff --git a/src/dialogs/save/convenience.c b/src/dialogs/save/convenience.c index 2c73997..755c1a7 100644 --- a/src/dialogs/save/convenience.c +++ b/src/dialogs/save/convenience.c @@ -36,19 +36,70 @@ LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error) { - if(*error) + g_autofree gchar * message = NULL; + + if(filename) + { + message = g_strdup_printf("Can't save contents to file \"%s\"",filename); + } + else { - return -1; + message = g_strdup("Can't save contents to file"); } if(!v3270_is_connected(widget)) { - *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); - return -1; + if(error) + { + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); + } + else + { + GtkWidget *popup = gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, + message + ); + + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); + + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); + + gtk_dialog_run(GTK_DIALOG(popup)); + gtk_widget_destroy(popup); + } + return errno = ENOTCONN; } lib3270_trace_event(v3270_get_session(widget),"save action activated (type=%d)",(int) mode); - return lib3270_save(v3270_get_session(widget),mode,filename); + int rc = lib3270_save(v3270_get_session(widget),mode,filename); + + if(!rc) + return 0; + + if(error) + { + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),rc,"%s",strerror(rc)); + } + else + { + GtkWidget *popup = gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, + message + ); + + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); + + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); + + gtk_dialog_run(GTK_DIALOG(popup)); + gtk_widget_destroy(popup); + } + + return errno = rc; } int v3270_save_all(GtkWidget *widget, const gchar *filename, GError **error) diff --git a/src/dialogs/save/save.c b/src/dialogs/save/save.c index 68175ab..014e143 100644 --- a/src/dialogs/save/save.c +++ b/src/dialogs/save/save.c @@ -100,6 +100,32 @@ gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); } + /* + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action) + { + const gchar * attr = g_object_get_data(action,"overwrite"); + GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; + GtkWidget * dialog; + + if(attr && !g_ascii_strcasecmp(attr,"yes")) + return ret; + + dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(chooser), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL, + "%s",_("The file already exists. Replace it?")); + + + if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) + ret = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN; + + gtk_widget_destroy(dialog); + + return ret; + + } + */ + #ifdef WIN32 static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { #else @@ -120,6 +146,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon NULL ); + // g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action)); + + if(filename) gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); -- libgit2 0.21.2