ソースを参照

Fix persistent favorites after rename

Signed-off-by: Daniel Kříž <[email protected]>
(cherry picked from commit 0535ef549a6563e374c95ff9bdf6171117a59e6a)
Daniel Kříž 3 年 前
コミット
7ed3bfc2fb
2 ファイル変更25 行追加0 行削除
  1. 12 0
      editor/editor_file_dialog.cpp
  2. 13 0
      editor/filesystem_dock.cpp

+ 12 - 0
editor/editor_file_dialog.cpp

@@ -1199,6 +1199,18 @@ void EditorFileDialog::_update_favorites() {
 	favorite->set_pressed(false);
 
 	Vector<String> favorited = EditorSettings::get_singleton()->get_favorites();
+
+	bool fav_changed = false;
+	for (int i = favorited.size() - 1; i >= 0; i--) {
+		if (!dir_access->dir_exists(favorited[i])) {
+			favorited.remove(i);
+			fav_changed = true;
+		}
+	}
+	if (fav_changed) {
+		EditorSettings::get_singleton()->set_favorites(favorited);
+	}
+
 	for (int i = 0; i < favorited.size(); i++) {
 		bool cres = favorited[i].begins_with("res://");
 		if (cres != res) {

+ 13 - 0
editor/filesystem_dock.cpp

@@ -219,6 +219,19 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo
 	favorites->set_collapsed(p_uncollapsed_paths.find("Favorites") < 0);
 
 	Vector<String> favorite_paths = EditorSettings::get_singleton()->get_favorites();
+
+	DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
+	bool fav_changed = false;
+	for (int i = favorite_paths.size() - 1; i >= 0; i--) {
+		if (!da->dir_exists(favorite_paths[i])) {
+			favorite_paths.remove(i);
+			fav_changed = true;
+		}
+	}
+	if (fav_changed) {
+		EditorSettings::get_singleton()->set_favorites(favorite_paths);
+	}
+
 	for (int i = 0; i < favorite_paths.size(); i++) {
 		String fave = favorite_paths[i];
 		if (!fave.begins_with("res://")) {