You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-13 13:31:48 +00:00
Merge pull request #17059 from Jason0214/BugFix_favorite_updating
Editor: update favorite dirs when dir got deleted
This commit is contained in:
@@ -472,17 +472,18 @@ void DependencyRemoveDialog::_build_removed_dependency_tree(const Vector<Removed
|
|||||||
|
|
||||||
void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<String> &p_files) {
|
void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<String> &p_files) {
|
||||||
all_remove_files.clear();
|
all_remove_files.clear();
|
||||||
to_delete.clear();
|
dirs_to_delete.clear();
|
||||||
|
files_to_delete.clear();
|
||||||
owners->clear();
|
owners->clear();
|
||||||
|
|
||||||
for (int i = 0; i < p_folders.size(); ++i) {
|
for (int i = 0; i < p_folders.size(); ++i) {
|
||||||
String folder = p_folders[i].ends_with("/") ? p_folders[i] : (p_folders[i] + "/");
|
String folder = p_folders[i].ends_with("/") ? p_folders[i] : (p_folders[i] + "/");
|
||||||
_find_files_in_removed_folder(EditorFileSystem::get_singleton()->get_filesystem_path(folder), folder);
|
_find_files_in_removed_folder(EditorFileSystem::get_singleton()->get_filesystem_path(folder), folder);
|
||||||
to_delete.push_back(folder);
|
dirs_to_delete.push_back(folder);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < p_files.size(); ++i) {
|
for (int i = 0; i < p_files.size(); ++i) {
|
||||||
all_remove_files[p_files[i]] = String();
|
all_remove_files[p_files[i]] = String();
|
||||||
to_delete.push_back(p_files[i]);
|
files_to_delete.push_back(p_files[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<RemovedDependency> removed_deps;
|
Vector<RemovedDependency> removed_deps;
|
||||||
@@ -502,29 +503,49 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DependencyRemoveDialog::ok_pressed() {
|
void DependencyRemoveDialog::ok_pressed() {
|
||||||
bool files_only = true;
|
|
||||||
for (int i = 0; i < to_delete.size(); ++i) {
|
|
||||||
if (to_delete[i].ends_with("/")) {
|
|
||||||
files_only = false;
|
|
||||||
} else if (ResourceCache::has(to_delete[i])) {
|
|
||||||
Resource *res = ResourceCache::get(to_delete[i]);
|
|
||||||
res->set_path(""); //clear reference to path
|
|
||||||
}
|
|
||||||
|
|
||||||
String path = OS::get_singleton()->get_resource_dir() + to_delete[i].replace_first("res://", "/");
|
if (dirs_to_delete.size() == 0) {
|
||||||
|
//If we only deleted files we should only need to tell the file system about the files we touched.
|
||||||
|
for (int i = 0; i < files_to_delete.size(); ++i)
|
||||||
|
EditorFileSystem::get_singleton()->update_file(files_to_delete[i]);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for (int i = 0; i < files_to_delete.size(); ++i) {
|
||||||
|
if (ResourceCache::has(files_to_delete[i])) {
|
||||||
|
Resource *res = ResourceCache::get(files_to_delete[i]);
|
||||||
|
res->set_path("");
|
||||||
|
}
|
||||||
|
String path = OS::get_singleton()->get_resource_dir() + files_to_delete[i].replace_first("res://", "/");
|
||||||
print_line("Moving to trash: " + path);
|
print_line("Moving to trash: " + path);
|
||||||
Error err = OS::get_singleton()->move_to_trash(path);
|
Error err = OS::get_singleton()->move_to_trash(path);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + to_delete[i] + "\n");
|
EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + files_to_delete[i] + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (files_only) {
|
for (int i = 0; i < dirs_to_delete.size(); ++i) {
|
||||||
//If we only deleted files we should only need to tell the file system about the files we touched.
|
String path = OS::get_singleton()->get_resource_dir() + dirs_to_delete[i].replace_first("res://", "/");
|
||||||
for (int i = 0; i < to_delete.size(); ++i) {
|
print_line("Moving to trash: " + path);
|
||||||
EditorFileSystem::get_singleton()->update_file(to_delete[i]);
|
Error err = OS::get_singleton()->move_to_trash(path);
|
||||||
|
if (err != OK) {
|
||||||
|
EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + dirs_to_delete[i] + "\n");
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
// if some dirs would be deleted, favorite dirs need to be updated
|
||||||
|
Vector<String> previous_favorite_dirs = EditorSettings::get_singleton()->get_favorite_dirs();
|
||||||
|
Vector<String> new_favorite_dirs;
|
||||||
|
|
||||||
|
for (int i = 0; i < previous_favorite_dirs.size(); ++i) {
|
||||||
|
if (dirs_to_delete.find(previous_favorite_dirs[i] + "/") < 0) {
|
||||||
|
new_favorite_dirs.push_back(previous_favorite_dirs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_favorite_dirs.size() < previous_favorite_dirs.size()) {
|
||||||
|
EditorSettings::get_singleton()->set_favorite_dirs(new_favorite_dirs);
|
||||||
|
}
|
||||||
|
|
||||||
EditorFileSystem::get_singleton()->scan_changes();
|
EditorFileSystem::get_singleton()->scan_changes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ class DependencyRemoveDialog : public ConfirmationDialog {
|
|||||||
Tree *owners;
|
Tree *owners;
|
||||||
|
|
||||||
Map<String, String> all_remove_files;
|
Map<String, String> all_remove_files;
|
||||||
Vector<String> to_delete;
|
Vector<String> dirs_to_delete;
|
||||||
|
Vector<String> files_to_delete;
|
||||||
|
|
||||||
struct RemovedDependency {
|
struct RemovedDependency {
|
||||||
String file;
|
String file;
|
||||||
|
|||||||
@@ -1027,6 +1027,7 @@ void EditorFileDialog::invalidate() {
|
|||||||
|
|
||||||
if (is_visible_in_tree()) {
|
if (is_visible_in_tree()) {
|
||||||
update_file_list();
|
update_file_list();
|
||||||
|
_update_favorites();
|
||||||
invalidated = false;
|
invalidated = false;
|
||||||
} else {
|
} else {
|
||||||
invalidated = true;
|
invalidated = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user