summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorecho-devim <devim@outlook.it>2017-03-15 18:05:36 +0100
committerCarlos Soriano <csoriano@gnome.org>2017-03-22 16:09:51 +0100
commit64f16e19c0dea88e9a992122904d104ecca8b954 (patch)
tree252a4134cce2d08b608727e1eeb353d7c49a54ec
parent80d796b5aa5060124500b706666530c48e21d6e5 (diff)
downloadnautilus-64f16e19c0dea88e9a992122904d104ecca8b954.tar.gz
file-conflict-dialog: Prevent replacing a directory with a symbolic link
If the user tries to replace a folder with a symbolic link with the same name,the content of the destination folder was being deleted. To fix this behaviour, the UI disables the replace button allowing the user only to skip or to rename in order to avoid the deletion of the destination folder's content. https://bugzilla.gnome.org/show_bug.cgi?id=632323
-rw-r--r--src/nautilus-file-conflict-dialog.c6
-rw-r--r--src/nautilus-file-conflict-dialog.h1
-rw-r--r--src/nautilus-operations-ui-manager.c25
3 files changed, 28 insertions, 4 deletions
diff --git a/src/nautilus-file-conflict-dialog.c b/src/nautilus-file-conflict-dialog.c
index 55e536692..62eafd1ec 100644
--- a/src/nautilus-file-conflict-dialog.c
+++ b/src/nautilus-file-conflict-dialog.c
@@ -153,6 +153,12 @@ nautilus_file_conflict_dialog_disable_skip (NautilusFileConflictDialog *fcd)
}
void
+nautilus_file_conflict_dialog_disable_replace (NautilusFileConflictDialog *fcd)
+{
+ gtk_widget_set_sensitive (fcd->replace_button, FALSE);
+}
+
+void
nautilus_file_conflict_dialog_disable_apply_to_all (NautilusFileConflictDialog *fcd)
{
gtk_widget_hide (fcd->checkbox);
diff --git a/src/nautilus-file-conflict-dialog.h b/src/nautilus-file-conflict-dialog.h
index 1b8452fe7..206d10031 100644
--- a/src/nautilus-file-conflict-dialog.h
+++ b/src/nautilus-file-conflict-dialog.h
@@ -50,6 +50,7 @@ void nautilus_file_conflict_dialog_set_replace_button_label (NautilusFileConflic
gchar *label);
void nautilus_file_conflict_dialog_disable_skip (NautilusFileConflictDialog *fcd);
+void nautilus_file_conflict_dialog_disable_replace (NautilusFileConflictDialog *fcd);
void nautilus_file_conflict_dialog_disable_apply_to_all (NautilusFileConflictDialog *fcd);
char* nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog);
diff --git a/src/nautilus-operations-ui-manager.c b/src/nautilus-operations-ui-manager.c
index ab6da215c..fd56e186b 100644
--- a/src/nautilus-operations-ui-manager.c
+++ b/src/nautilus-operations-ui-manager.c
@@ -137,7 +137,15 @@ set_copy_move_dialog_text (FileConflictDialogData *data)
if (destination_is_directory)
{
- if (source_is_directory)
+ if (nautilus_file_is_symbolic_link (data->source)
+ && !nautilus_file_is_symbolic_link (data->destination))
+ {
+ primary_text = g_strdup_printf (_("You are trying to replace the destination folder ā€œ%sā€ with a symbolic link."),
+ destination_name);
+ message = g_strdup_printf(_("This is not allowed in order to avoid the deletion of the destination folder's contents."));
+ message_extra = _("Please rename the symbolic link or press the skip button.");
+ }
+ else if (source_is_directory)
{
primary_text = g_strdup_printf (_("Merge folder ā€œ%sā€?"),
destination_name);
@@ -339,10 +347,19 @@ set_replace_button_label (FileConflictDialogData *data)
source_is_directory = nautilus_file_is_directory (data->source);
destination_is_directory = nautilus_file_is_directory (data->destination);
- if (source_is_directory && destination_is_directory)
+ if (destination_is_directory)
{
- nautilus_file_conflict_dialog_set_replace_button_label (data->dialog,
- _("Merge"));
+ if (nautilus_file_is_symbolic_link (data->source)
+ && !nautilus_file_is_symbolic_link (data->destination))
+ {
+ nautilus_file_conflict_dialog_disable_replace (data->dialog);
+ nautilus_file_conflict_dialog_disable_apply_to_all (data->dialog);
+ }
+ else if (source_is_directory)
+ {
+ nautilus_file_conflict_dialog_set_replace_button_label (data->dialog,
+ _("Merge"));
+ }
}
}