diff options
author | António Fernandes <antoniof@gnome.org> | 2020-01-30 01:00:26 +0000 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2021-02-10 10:50:53 +0000 |
commit | a509909412841af251000fcf793e9001988d558e (patch) | |
tree | 1a1c9bab5764e698c1c6a4f71f77175b0f34ab31 | |
parent | 1d2a116ec3dcacb0911415c0ebfa4dfeeb284524 (diff) | |
download | nautilus-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.c | 10 | ||||
-rw-r--r-- | src/nautilus-file-conflict-dialog.h | 4 | ||||
-rw-r--r-- | src/nautilus-file-operations.c | 10 | ||||
-rw-r--r-- | src/nautilus-operations-ui-manager.c | 19 | ||||
-rw-r--r-- | src/nautilus-operations-ui-manager.h | 5 |
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); |