diff options
author | Sachin Daluja <30343-sachindaluja@users.noreply.gitlab.gnome.org> | 2021-06-12 10:44:51 -0400 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2021-11-27 20:32:18 +0000 |
commit | f14743f274e84f03ee46c238a0c3aacf38572dd6 (patch) | |
tree | 4a32744a4662de5ebe4d07cc3a2edc4de9b8ec5a | |
parent | c7f3b8a86397c784d0e527f6f45aea8593e94954 (diff) | |
download | nautilus-f14743f274e84f03ee46c238a0c3aacf38572dd6.tar.gz |
file-operations: Remove duplicated code
The outermost code for handling the "duplicate" file operation
was mostly a copy of the similar code for the "copy" operation.
Remove the duplicated code and add minor conditional logic in
the code for "copy" operation to also handle "duplicate".
-rw-r--r-- | src/nautilus-file-operations.c | 88 | ||||
-rw-r--r-- | src/nautilus-file-operations.h | 5 | ||||
-rw-r--r-- | src/nautilus-file-undo-operations.c | 27 |
3 files changed, 30 insertions, 90 deletions
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c index ebe79047d..549832e98 100644 --- a/src/nautilus-file-operations.c +++ b/src/nautilus-file-operations.c @@ -6008,17 +6008,23 @@ nautilus_file_operations_copy (GTask *task, if (!nautilus_file_undo_manager_is_operating ()) { g_autoptr (GFile) src_dir = NULL; + NautilusFileUndoOp undo_op_type; src_dir = g_file_get_parent (job->files->data); - /* In the case of duplicate, the undo_info is already set, so we don't want to - * overwrite it wrongfully. - */ - if (job->common.undo_info == NULL) + undo_op_type = NAUTILUS_FILE_UNDO_OP_COPY; + + if (job->destination == NULL) { - job->common.undo_info = nautilus_file_undo_info_ext_new (NAUTILUS_FILE_UNDO_OP_COPY, - g_list_length (job->files), - src_dir, job->destination); + /* Use a distinct undo op ID for "duplicate" operation. This merely affects the user facing info-text about + * undo; the actual op logic is the same as the regular copy. + */ + + undo_op_type = NAUTILUS_FILE_UNDO_OP_DUPLICATE; } + + job->common.undo_info = nautilus_file_undo_info_ext_new (undo_op_type, + g_list_length (job->files), + src_dir, job->destination); } nautilus_progress_info_start (job->common.progress); @@ -7089,40 +7095,6 @@ nautilus_file_operations_link (GList *files, g_task_run_in_thread (task, link_task_thread_func); } - -void -nautilus_file_operations_duplicate (GList *files, - GtkWindow *parent_window, - NautilusFileOperationsDBusData *dbus_data, - NautilusCopyCallback done_callback, - gpointer done_callback_data) -{ - g_autoptr (GTask) task = NULL; - CopyMoveJob *job; - - job = copy_job_setup (files, - NULL, - parent_window, - dbus_data, - done_callback, - done_callback_data); - - if (!nautilus_file_undo_manager_is_operating ()) - { - g_autoptr (GFile) src_dir = NULL; - - src_dir = g_file_get_parent (files->data); - job->common.undo_info = - nautilus_file_undo_info_ext_new (NAUTILUS_FILE_UNDO_OP_DUPLICATE, - g_list_length (files), - src_dir, NULL); - } - - task = g_task_new (NULL, job->common.cancellable, copy_task_done, job); - g_task_set_task_data (task, job, NULL); - g_task_run_in_thread (task, nautilus_file_operations_copy); -} - static void set_permissions_task_done (GObject *source_object, GAsyncResult *res, @@ -7355,7 +7327,7 @@ nautilus_file_operations_copy_move (const GList *item_uris, { GList *locations; GList *p; - GFile *dest, *src_dir; + GFile *dest; GtkWindow *parent_window; gboolean target_is_mapping; gboolean have_nonmapping_source; @@ -7399,28 +7371,16 @@ nautilus_file_operations_copy_move (const GList *item_uris, if (copy_action == GDK_ACTION_COPY) { - src_dir = g_file_get_parent (locations->data); - if (target_dir == NULL || - (src_dir != NULL && - g_file_equal (src_dir, dest))) - { - nautilus_file_operations_duplicate (locations, - parent_window, - dbus_data, - done_callback, done_callback_data); - } - else - { - nautilus_file_operations_copy_async (locations, - dest, - parent_window, - dbus_data, - done_callback, done_callback_data); - } - if (src_dir) - { - g_object_unref (src_dir); - } + gboolean duplicate; + + duplicate = target_dir == NULL || g_file_has_parent (locations->data, dest); + + /* Duplication operation is identified by having a NULL dest */ + nautilus_file_operations_copy_async (locations, + duplicate ? NULL : dest, + parent_window, + dbus_data, + done_callback, done_callback_data); } else if (copy_action == GDK_ACTION_MOVE) { diff --git a/src/nautilus-file-operations.h b/src/nautilus-file-operations.h index 14d664f80..24b8005d8 100644 --- a/src/nautilus-file-operations.h +++ b/src/nautilus-file-operations.h @@ -138,11 +138,6 @@ void nautilus_file_operations_move_async (GList *files, void nautilus_file_operations_move_sync (GList *files, GFile *target_dir); -void nautilus_file_operations_duplicate (GList *files, - GtkWindow *parent_window, - NautilusFileOperationsDBusData *dbus_data, - NautilusCopyCallback done_callback, - gpointer done_callback_data); void nautilus_file_operations_link (GList *files, GFile *target_dir, GtkWindow *parent_window, diff --git a/src/nautilus-file-undo-operations.c b/src/nautilus-file-undo-operations.c index 70123dace..41abe2935 100644 --- a/src/nautilus-file-undo-operations.c +++ b/src/nautilus-file-undo-operations.c @@ -597,18 +597,6 @@ ext_create_link_redo_func (NautilusFileUndoInfoExt *self, } static void -ext_duplicate_redo_func (NautilusFileUndoInfoExt *self, - GtkWindow *parent_window, - NautilusFileOperationsDBusData *dbus_data) -{ - nautilus_file_operations_duplicate (g_queue_peek_head_link (self->sources), - parent_window, - dbus_data, - file_undo_info_transfer_callback, - self); -} - -static void ext_copy_redo_func (NautilusFileUndoInfoExt *self, GtkWindow *parent_window, NautilusFileOperationsDBusData *dbus_data) @@ -647,14 +635,11 @@ ext_redo_func (NautilusFileUndoInfo *info, { ext_move_restore_redo_func (self, parent_window, dbus_data); } - else if (op_type == NAUTILUS_FILE_UNDO_OP_COPY) + else if (op_type == NAUTILUS_FILE_UNDO_OP_COPY || + op_type == NAUTILUS_FILE_UNDO_OP_DUPLICATE) { ext_copy_redo_func (self, parent_window, dbus_data); } - else if (op_type == NAUTILUS_FILE_UNDO_OP_DUPLICATE) - { - ext_duplicate_redo_func (self, parent_window, dbus_data); - } else if (op_type == NAUTILUS_FILE_UNDO_OP_CREATE_LINK) { ext_create_link_redo_func (self, parent_window, dbus_data); @@ -692,9 +677,9 @@ ext_move_undo_func (NautilusFileUndoInfoExt *self, } static void -ext_copy_duplicate_undo_func (NautilusFileUndoInfoExt *self, - GtkWindow *parent_window, - NautilusFileOperationsDBusData *dbus_data) +ext_copy_undo_func (NautilusFileUndoInfoExt *self, + GtkWindow *parent_window, + NautilusFileOperationsDBusData *dbus_data) { GList *files; @@ -720,7 +705,7 @@ ext_undo_func (NautilusFileUndoInfo *info, op_type == NAUTILUS_FILE_UNDO_OP_DUPLICATE || op_type == NAUTILUS_FILE_UNDO_OP_CREATE_LINK) { - ext_copy_duplicate_undo_func (self, parent_window, dbus_data); + ext_copy_undo_func (self, parent_window, dbus_data); } else if (op_type == NAUTILUS_FILE_UNDO_OP_MOVE) { |