aboutsummaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/ChangeLog6
-rw-r--r--shell/e-shell-folder-commands.c63
2 files changed, 36 insertions, 33 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 616127ba0a..4c1d84e01e 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,9 @@
+2003-07-09 Ettore Perazzoli <ettore@ximian.com>
+
+ * e-shell-folder-commands.c (e_shell_command_rename_folder): Do
+ not overwrite an existing folder. Also, cleaned up the code a
+ bit. [#45982]
+
2003-06-25 Chris Toshok <toshok@ximian.com>
* e-config-upgrade.c: add general_map and a reference to it in
diff --git a/shell/e-shell-folder-commands.c b/shell/e-shell-folder-commands.c
index 6317b8da96..02be16cd5f 100644
--- a/shell/e-shell-folder-commands.c
+++ b/shell/e-shell-folder-commands.c
@@ -517,13 +517,9 @@ e_shell_command_rename_folder (EShell *shell,
RenameCallbackData *callback_data;
const char *old_name;
char *prompt;
- char *new_name;
- char *old_base_path;
- char *new_path;
+ gboolean done;
- g_return_if_fail (shell != NULL);
g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL);
g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
storage_set = e_shell_get_storage_set (shell);
@@ -537,38 +533,39 @@ e_shell_command_rename_folder (EShell *shell,
old_name = e_folder_get_name (folder);
prompt = g_strdup_printf (_("Rename the \"%s\" folder to:"), old_name);
- while (1) {
+ done = FALSE;
+ while (! done) {
const char *reason;
-
- new_name = e_request_string (shell_view != NULL ? GTK_WINDOW (shell_view) : NULL,
- _("Rename Folder"), prompt, old_name);
-
- if (new_name == NULL)
- return;
-
- if (e_shell_folder_name_is_valid (new_name, &reason))
- break;
-
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("The specified folder name is not valid: %s"), reason);
+ char *new_name;
+
+ new_name = e_request_string (GTK_WINDOW (shell_view), _("Rename Folder"), prompt, old_name);
+
+ if (new_name == NULL || strcmp (old_name, new_name) == 0) {
+ done = TRUE;
+ } else if (! e_shell_folder_name_is_valid (new_name, &reason)) {
+ e_notice (shell_view, GTK_MESSAGE_ERROR,
+ _("The specified folder name is not valid: %s"), reason);
+ } else {
+ char *old_base_path = g_path_get_dirname (folder_path);
+ char *new_path = g_build_filename (old_base_path, new_name, NULL);
+
+ if (e_storage_set_get_folder (storage_set, new_path) != NULL) {
+ e_notice (shell_view, GTK_MESSAGE_ERROR,
+ _("A folder named \"%s\" already exists. Please use a different name."),
+ new_name);
+ } else {
+ callback_data = rename_callback_data_new (shell_view, new_path);
+ e_storage_set_async_xfer_folder (storage_set, folder_path, new_path, TRUE,
+ rename_cb, callback_data);
+ done = TRUE;
+ }
+
+ g_free (old_base_path);
+ g_free (new_path);
+ }
}
g_free (prompt);
-
- if (strcmp (old_name, new_name) == 0) {
- g_free (new_name);
- return;
- }
-
- old_base_path = g_path_get_dirname (folder_path);
- new_path = g_build_filename (old_base_path, new_name, NULL);
-
- callback_data = rename_callback_data_new (shell_view, new_path);
- e_storage_set_async_xfer_folder (storage_set, folder_path, new_path, TRUE, rename_cb, callback_data);
-
- g_free (old_base_path);
- g_free (new_path);
- g_free (new_name);
}