SF.net SVN: geany: [2174] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Jan 15 17:04:32 UTC 2008
Revision: 2174
http://geany.svn.sourceforge.net/geany/?rev=2174&view=rev
Author: ntrel
Date: 2008-01-15 09:04:31 -0800 (Tue, 15 Jan 2008)
Log Message:
-----------
Don't unlink the old file if renaming failed.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/dialogs.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-01-14 17:46:21 UTC (rev 2173)
+++ trunk/ChangeLog 2008-01-15 17:04:31 UTC (rev 2174)
@@ -1,3 +1,9 @@
+2008-01-15 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/dialogs.c:
+ Don't unlink the old file if renaming failed.
+
+
2008-01-14 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/callbacks.c, src/search.c, src/editor.c, src/editor.h:
Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c 2008-01-14 17:46:21 UTC (rev 2173)
+++ trunk/src/dialogs.c 2008-01-15 17:04:31 UTC (rev 2174)
@@ -378,6 +378,49 @@
#if ! GEANY_USE_WIN32_DIALOG
+static void handle_save_as(const gchar *utf8_filename, gboolean open_new_tab,
+ gboolean rename_file)
+{
+ gint idx = document_get_cur_idx();
+
+ g_return_if_fail(NZV(utf8_filename));
+
+ if (open_new_tab)
+ { // "open" the saved file in a new tab
+ idx = document_clone(idx, utf8_filename);
+ }
+ else
+ {
+ if (doc_list[idx].file_name != NULL)
+ {
+ if (rename_file)
+ {
+ gchar *old_filename = utils_get_locale_from_utf8(doc_list[idx].file_name);
+ gchar *new_filename = utils_get_locale_from_utf8(utf8_filename);
+
+ g_rename(old_filename, new_filename);
+ g_free(old_filename);
+ g_free(new_filename);
+ }
+ // create a new tm_source_file object otherwise tagmanager won't work correctly
+ tm_workspace_remove_object(doc_list[idx].tm_file, TRUE, TRUE);
+ doc_list[idx].tm_file = NULL;
+ g_free(doc_list[idx].file_name);
+ }
+ doc_list[idx].file_name = g_strdup(utf8_filename);
+ }
+
+ utils_replace_filename(idx);
+ document_save_file(idx, TRUE);
+
+ if (! open_new_tab)
+ build_menu_update(idx);
+
+ // finally add current file to recent files menu
+ ui_add_recent_file(doc_list[idx].file_name);
+}
+
+
static void
on_file_save_dialog_response (GtkDialog *dialog,
gint response,
@@ -390,15 +433,19 @@
case GEANY_RESPONSE_RENAME:
rename_file = TRUE;
// fall through
-
case GTK_RESPONSE_ACCEPT:
{
- gint idx = document_get_cur_idx();
gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ui_widgets.save_filesel));
- gchar *utf8_filename;
gboolean open_new_tab = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(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);
// check if file exists and ask whether to overwrite or not
if (g_file_test(new_filename, G_FILE_TEST_EXISTS))
@@ -406,41 +453,15 @@
if (dialogs_show_question(
_("The file '%s' already exists. Do you want to overwrite it?"),
utf8_filename) == FALSE)
+ {
+ g_free(utf8_filename);
+ g_free(new_filename);
return;
- }
-
- if (open_new_tab)
- { // "open" the saved file in a new tab
- idx = document_clone(idx, utf8_filename);
- g_free(utf8_filename);
- }
- else
- {
- if (doc_list[idx].file_name != NULL)
- {
- if (rename_file)
- { // delete the previous file name
- gchar *old_filename = utils_get_locale_from_utf8(doc_list[idx].file_name);
-
- g_unlink(old_filename);
- g_free(old_filename);
- }
- // create a new tm_source_file object otherwise tagmanager won't work correctly
- tm_workspace_remove_object(doc_list[idx].tm_file, TRUE, TRUE);
- doc_list[idx].tm_file = NULL;
- g_free(doc_list[idx].file_name);
}
- doc_list[idx].file_name = utf8_filename;
}
- utils_replace_filename(idx);
- document_save_file(idx, TRUE);
+ handle_save_as(utf8_filename, open_new_tab, rename_file);
- if (! open_new_tab)
- build_menu_update(idx);
-
- // finally add current file to recent files menu
- ui_add_recent_file(doc_list[idx].file_name);
-
+ g_free(utf8_filename);
g_free(new_filename);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list