Allow duplicating files when holding Control

(cherry picked from commit b426d11d86)
This commit is contained in:
Tomasz Chabora 2020-06-05 01:53:35 +02:00 committed by Rémi Verschelde
parent 931a927a40
commit d46ab53b41
1 changed files with 27 additions and 1 deletions

View File

@ -33,6 +33,7 @@
#include "core/io/resource_loader.h" #include "core/io/resource_loader.h"
#include "core/os/dir_access.h" #include "core/os/dir_access.h"
#include "core/os/file_access.h" #include "core/os/file_access.h"
#include "core/os/input.h"
#include "core/os/keyboard.h" #include "core/os/keyboard.h"
#include "core/os/os.h" #include "core/os/os.h"
#include "core/project_settings.h" #include "core/project_settings.h"
@ -2059,8 +2060,33 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data,
} }
} }
if (!to_move.empty()) { if (!to_move.empty()) {
if (Input::get_singleton()->is_key_pressed(KEY_CONTROL)) {
for (int i = 0; i < to_move.size(); i++) {
String new_path;
String new_path_base;
if (to_move[i].is_file) {
new_path = to_dir.plus_file(to_move[i].path.get_file());
new_path_base = new_path.get_basename() + " (%d)." + new_path.get_extension();
} else {
Vector<String> path_split = to_move[i].path.split("/");
new_path = to_dir.plus_file(path_split[path_split.size() - 2]);
new_path_base = new_path + " (%d)";
}
int exist_counter = 1;
DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
while (da->file_exists(new_path) || da->dir_exists(new_path)) {
exist_counter++;
new_path = vformat(new_path_base, exist_counter);
}
_try_duplicate_item(to_move[i], new_path);
}
_rescan();
} else {
_move_operation_confirm(to_dir); _move_operation_confirm(to_dir);
} }
}
} else if (favorite) { } else if (favorite) {
// Add the files from favorites. // Add the files from favorites.
Vector<String> fnames = drag_data["files"]; Vector<String> fnames = drag_data["files"];