Skip to content

Commit

Permalink
Fix unexpected behaviors of using Duplicate To on folders
Browse files Browse the repository at this point in the history
Fix folder not being copied when empty.
Fix Keep Both would generate wrong paths when copying folders.
  • Loading branch information
Rindbee committed Oct 21, 2023
1 parent f71f4b8 commit 90768f1
Showing 1 changed file with 7 additions and 19 deletions.
26 changes: 7 additions & 19 deletions editor/filesystem_dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1528,6 +1528,8 @@ void FileSystemDock::_try_duplicate_item(const FileOrFolder &p_item, const Strin
}
}
} else {
da->make_dir(new_path);

// Recursively duplicate all files inside the folder.
Ref<DirAccess> old_dir = DirAccess::open(old_path);
ERR_FAIL_COND(old_dir.is_null());
Expand Down Expand Up @@ -1894,22 +1896,15 @@ void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool p_cop
if (p_overwrite == OVERWRITE_RENAME) {
new_paths.write[i] = _get_unique_name(to_move[i], p_to_path);
} else {
new_paths.write[i] = p_to_path.path_join(to_move[i].path.get_file());
new_paths.write[i] = p_to_path.path_join(to_move[i].path.trim_suffix("/").get_file());
}
}

if (p_copy) {
bool is_copied = false;
for (int i = 0; i < to_move.size(); i++) {
String old_path = to_move[i].path;
String new_path = new_paths[i];

if (!to_move[i].is_file) {
new_path = new_path.path_join(old_path.trim_suffix("/").get_file());
}

if (old_path != new_path) {
_try_duplicate_item(to_move[i], new_path);
if (to_move[i].path != new_paths[i]) {
_try_duplicate_item(to_move[i], new_paths[i]);
is_copied = true;
}
}
Expand All @@ -1934,15 +1929,8 @@ void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool p_cop
HashMap<String, String> folder_renames;

for (int i = 0; i < to_move.size(); i++) {
String old_path = to_move[i].path;
String new_path = new_paths[i];

if (!to_move[i].is_file) {
new_path = new_path.path_join(old_path.trim_suffix("/").get_file());
}

if (old_path != new_path) {
_try_move_item(to_move[i], new_path, file_renames, folder_renames);
if (to_move[i].path != new_paths[i]) {
_try_move_item(to_move[i], new_paths[i], file_renames, folder_renames);
is_moved = true;
}
}
Expand Down

0 comments on commit 90768f1

Please sign in to comment.