From c960a51f135864d58b8805e6a70621e0a83f695f Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Mon, 20 Jul 2009 16:12:23 +0000 Subject: [PATCH] Fix checking whether to overwrite when using the Rename button in the 'Save As' dialog. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@4000 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 3 +++ src/dialogs.c | 31 +++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2068224d1..bcf087299 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,9 @@ * src/treeviews.c: Fix showing project name for documents list files with no subdirectory (oops). + * src/dialogs.c: + Fix checking whether to overwrite when using the Rename button in + the 'Save As' dialog. 2009-07-19 Enrico Tröger diff --git a/src/dialogs.c b/src/dialogs.c index fea52b798..a70404a2c 100644 --- a/src/dialogs.c +++ b/src/dialogs.c @@ -373,37 +373,42 @@ on_file_save_dialog_response (GtkDialog *dialog, { gboolean rename_file = FALSE; gboolean success = FALSE; + gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ui_widgets.save_filesel)); switch (response) { case GEANY_RESPONSE_RENAME: + /* rename doesn't check for empty filename or overwriting */ + if (! NZV(new_filename)) + { + utils_beep(); + break; + } + if (g_file_test(new_filename, G_FILE_TEST_EXISTS) && + !dialogs_show_question_full(NULL, NULL, NULL, + _("Overwrite?"), + _("Filename already exists!"))) + break; rename_file = TRUE; /* fall through */ case GTK_RESPONSE_ACCEPT: { - gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ui_widgets.save_filesel)); gboolean open_new_tab = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(ui_lookup_widget(ui_widgets.save_filesel, "check_open_new_tab"))); gchar *utf8_filename; - if (! NZV(new_filename)) /* rename doesn't check for empty filename */ - { - utils_beep(); - g_free(new_filename); - return; - } utf8_filename = utils_get_utf8_from_locale(new_filename); - success = handle_save_as(utf8_filename, open_new_tab, rename_file); g_free(utf8_filename); - g_free(new_filename); break; } case GTK_RESPONSE_CANCEL: success = TRUE; break; } + g_free(new_filename); + if (success) gtk_widget_hide(ui_widgets.save_filesel); } @@ -1412,7 +1417,8 @@ gboolean dialogs_show_question(const gchar *text, ...) /* extra_text can be NULL; otherwise it is displayed below main_text. - * if parent is NULL, main_widgets.window will be used */ + * if parent is NULL, main_widgets.window will be used + * yes_btn, no_btn can be NULL. */ gboolean dialogs_show_question_full(GtkWidget *parent, const gchar *yes_btn, const gchar *no_btn, const gchar *extra_text, const gchar *main_text, ...) { @@ -1420,6 +1426,11 @@ gboolean dialogs_show_question_full(GtkWidget *parent, const gchar *yes_btn, con gchar string[512]; va_list args; + if (!yes_btn) + yes_btn = GTK_STOCK_YES; + if (!no_btn) + no_btn = GTK_STOCK_NO; + va_start(args, main_text); g_vsnprintf(string, 511, main_text, args); va_end(args);