diff --git a/src/encrypt.c b/src/encrypt.c index 8711476..d3ba736 100644 --- a/src/encrypt.c +++ b/src/encrypt.c @@ -150,6 +150,7 @@ output_clicked(GtkButton *button, gpointer data) NULL); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dlg), yki->output_filename); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dlg), yki->output_basename); + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dlg), TRUE); if ( gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_ACCEPT ) { g_free(yki->output_filename); @@ -222,6 +223,29 @@ create_encrypt_dialog(yki_encrypt_data_t *yki) return GTK_DIALOG(gtk_builder_get_object(builder, "dlgEncrypt")); } +static int +confirm_overwrite(GtkWindow *parent, yki_encrypt_data_t *yki) +{ + GtkWidget *dlg; + int ret; + + dlg = gtk_message_dialog_new(parent, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, + "A file name \"%s\" already exists. " + "Do you want to replace it?", yki->output_basename); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dlg), + "Replacing it will overwrite its contents."); + gtk_dialog_add_buttons(GTK_DIALOG(dlg), + "Cancel", GTK_RESPONSE_CANCEL, + "Replace", GTK_RESPONSE_OK, + NULL); + + ret = gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_OK; + + gtk_widget_destroy(dlg); + + return ret; +} + /* Dealing with public keys. */ @@ -356,7 +380,12 @@ yki_encrypt(gpgme_ctx_t gpgme, const char *file, GError **error) if ( ret && gtk_dialog_run(dlg) == GTK_RESPONSE_OK && yki_can_encrypt(yki) ) { gpgme_set_armor(gpgme, yki.armored); - ret = gpgutil_open_file(file, "r", &in, error); + /* Check with user before overwriting a file with the default filename. */ + if ( g_file_test(yki.output_filename, G_FILE_TEST_EXISTS) && ! yki.output_filename_userset ) + ret = confirm_overwrite(GTK_WINDOW(dlg), &yki); + + if ( ret ) + ret = gpgutil_open_file(file, "r", &in, error); if ( ret ) ret = gpgutil_open_file(yki.output_filename, "w", &out, error);