summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniof@gnome.org>2020-01-30 01:00:26 +0000
committerAntónio Fernandes <antoniof@gnome.org>2021-02-10 10:50:53 +0000
commita509909412841af251000fcf793e9001988d558e (patch)
tree1a1c9bab5764e698c1c6a4f71f77175b0f34ab31
parent1d2a116ec3dcacb0911415c0ebfa4dfeeb284524 (diff)
downloadnautilus-a509909412841af251000fcf793e9001988d558e.tar.gz
file-conflict-dialog: Automatically suggest new name
When "Select new name for the destination" expander is selected, the users must type a new name in order to proceed. This makes them go and look at the destination to see what would even make a unique name. Let's be more helpful and suggest a unique name based on the original. Closes https://gitlab.gnome.org/GNOME/nautilus/issues/1344
-rw-r--r--src/nautilus-file-conflict-dialog.c10
-rw-r--r--src/nautilus-file-conflict-dialog.h4
-rw-r--r--src/nautilus-file-operations.c10
-rw-r--r--src/nautilus-operations-ui-manager.c19
-rw-r--r--src/nautilus-operations-ui-manager.h5
5 files changed, 37 insertions, 11 deletions
diff --git a/src/nautilus-file-conflict-dialog.c b/src/nautilus-file-conflict-dialog.c
index 8adb4bb14..c48bd7bfb 100644
--- a/src/nautilus-file-conflict-dialog.c
+++ b/src/nautilus-file-conflict-dialog.c
@@ -38,6 +38,7 @@ struct _NautilusFileConflictDialog
GtkDialog parent_instance;
gchar *conflict_name;
+ gchar *suggested_name;
/* UI objects */
GtkWidget *titles_vbox;
@@ -135,8 +136,14 @@ nautilus_file_conflict_dialog_set_conflict_name (NautilusFileConflictDialog *fcd
gchar *conflict_name)
{
fcd->conflict_name = g_strdup (conflict_name);
+}
- gtk_entry_set_text (GTK_ENTRY (fcd->entry), fcd->conflict_name);
+void
+nautilus_file_conflict_dialog_set_suggested_name (NautilusFileConflictDialog *fcd,
+ gchar *suggested_name)
+{
+ fcd->suggested_name = g_strdup (suggested_name);
+ gtk_entry_set_text (GTK_ENTRY (fcd->entry), suggested_name);
}
void
@@ -352,6 +359,7 @@ do_finalize (GObject *self)
NautilusFileConflictDialog *dialog = NAUTILUS_FILE_CONFLICT_DIALOG (self);
g_free (dialog->conflict_name);
+ g_free (dialog->suggested_name);
G_OBJECT_CLASS (nautilus_file_conflict_dialog_parent_class)->finalize (self);
}
diff --git a/src/nautilus-file-conflict-dialog.h b/src/nautilus-file-conflict-dialog.h
index e54071b02..e7d34f6fd 100644
--- a/src/nautilus-file-conflict-dialog.h
+++ b/src/nautilus-file-conflict-dialog.h
@@ -45,6 +45,8 @@ void nautilus_file_conflict_dialog_set_file_labels (NautilusFileConflictDialog *
gchar *source_label);
void nautilus_file_conflict_dialog_set_conflict_name (NautilusFileConflictDialog *fcd,
gchar *conflict_name);
+void nautilus_file_conflict_dialog_set_suggested_name (NautilusFileConflictDialog *fcd,
+ gchar *suggested_name);
void nautilus_file_conflict_dialog_set_replace_button_label (NautilusFileConflictDialog *fcd,
gchar *label);
@@ -55,4 +57,4 @@ void nautilus_file_conflict_dialog_disable_apply_to_all (NautilusFileConflictDia
char* nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog);
gboolean nautilus_file_conflict_dialog_get_apply_to_all (NautilusFileConflictDialog *dialog);
-G_END_DECLS \ No newline at end of file
+G_END_DECLS
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c
index 3adf3b54c..5558786c1 100644
--- a/src/nautilus-file-operations.c
+++ b/src/nautilus-file-operations.c
@@ -5136,14 +5136,22 @@ handle_copy_move_conflict (CommonJob *job,
GFile *dest_dir)
{
FileConflictResponse *response;
+ g_autofree gchar *basename = NULL;
+ g_autoptr (GFile) suggested_file = NULL;
+ g_autofree gchar *suggestion = NULL;
g_timer_stop (job->time);
nautilus_progress_info_pause (job->progress);
+ basename = g_file_get_basename (dest);
+ suggested_file = nautilus_generate_unique_file_in_directory (dest_dir, basename);
+ suggestion = g_file_get_basename (suggested_file);
+
response = copy_move_conflict_ask_user_action (job->parent_window,
src,
dest,
- dest_dir);
+ dest_dir,
+ suggestion);
nautilus_progress_info_resume (job->progress);
g_timer_continue (job->time);
diff --git a/src/nautilus-operations-ui-manager.c b/src/nautilus-operations-ui-manager.c
index 790592f5a..170ee7f5a 100644
--- a/src/nautilus-operations-ui-manager.c
+++ b/src/nautilus-operations-ui-manager.c
@@ -88,6 +88,8 @@ typedef struct
GFile *destination_name;
GFile *destination_directory_name;
+ gchar *suggestion;
+
GtkWindow *parent;
FileConflictResponse *response;
@@ -328,14 +330,17 @@ set_file_labels (FileConflictDialogData *data)
}
static void
-set_conflict_name (FileConflictDialogData *data)
+set_conflict_and_suggested_names (FileConflictDialogData *data)
{
- g_autofree gchar *edit_name = NULL;
+ g_autofree gchar *conflict_name = NULL;
- edit_name = nautilus_file_get_edit_name (data->destination);
+ conflict_name = nautilus_file_get_edit_name (data->destination);
nautilus_file_conflict_dialog_set_conflict_name (data->dialog,
- edit_name);
+ conflict_name);
+
+ nautilus_file_conflict_dialog_set_suggested_name (data->dialog,
+ data->suggestion);
}
static void
@@ -399,7 +404,7 @@ copy_move_conflict_on_file_list_ready (GList *files,
set_file_labels (data);
- set_conflict_name (data);
+ set_conflict_and_suggested_names (data);
set_replace_button_label (data);
@@ -482,7 +487,8 @@ FileConflictResponse *
copy_move_conflict_ask_user_action (GtkWindow *parent_window,
GFile *source_name,
GFile *destination_name,
- GFile *destination_directory_name)
+ GFile *destination_directory_name,
+ gchar *suggestion)
{
FileConflictDialogData *data;
FileConflictResponse *response;
@@ -492,6 +498,7 @@ copy_move_conflict_ask_user_action (GtkWindow *parent_window,
data->source_name = source_name;
data->destination_name = destination_name;
data->destination_directory_name = destination_directory_name;
+ data->suggestion = suggestion;
data->response = g_slice_new0 (FileConflictResponse);
data->response->new_name = NULL;
diff --git a/src/nautilus-operations-ui-manager.h b/src/nautilus-operations-ui-manager.h
index 032ffb5bd..4321c824f 100644
--- a/src/nautilus-operations-ui-manager.h
+++ b/src/nautilus-operations-ui-manager.h
@@ -14,7 +14,8 @@ void file_conflict_response_free (FileConflictResponse *data);
FileConflictResponse * copy_move_conflict_ask_user_action (GtkWindow *parent_window,
GFile *src,
GFile *dest,
- GFile *dest_dir);
+ GFile *dest_dir,
+ gchar *suggestion);
enum
{
@@ -24,4 +25,4 @@ enum
};
void handle_unsupported_compressed_file (GtkWindow *parent_window,
- GFile *compressed_file); \ No newline at end of file
+ GFile *compressed_file);