Переглянути джерело

Merge pull request #98584 from Nazarwadim/emit_only_one_signal

Emit `filesystem_changed` only once per frame
Clay John 11 місяців тому
батько
коміт
a997001bd5
2 змінених файлів з 11 додано та 1 видалено
  1. 9 1
      editor/editor_file_system.cpp
  2. 2 0
      editor/editor_file_system.h

+ 9 - 1
editor/editor_file_system.cpp

@@ -2376,10 +2376,18 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) {
 		if (!is_scanning()) {
 			_process_update_pending();
 		}
-		call_deferred(SNAME("emit_signal"), "filesystem_changed"); // Update later
+		if (!filesystem_changed_queued) {
+			filesystem_changed_queued = true;
+			callable_mp(this, &EditorFileSystem::_notify_filesystem_changed).call_deferred();
+		}
 	}
 }
 
+void EditorFileSystem::_notify_filesystem_changed() {
+	emit_signal("filesystem_changed");
+	filesystem_changed_queued = false;
+}
+
 HashSet<String> EditorFileSystem::get_valid_extensions() const {
 	return valid_extensions;
 }

+ 2 - 0
editor/editor_file_system.h

@@ -180,6 +180,7 @@ class EditorFileSystem : public Node {
 	EditorFileSystemDirectory *new_filesystem = nullptr;
 	ScannedDirectory *first_scan_root_dir = nullptr;
 
+	bool filesystem_changed_queued = false;
 	bool scanning = false;
 	bool importing = false;
 	bool first_scan = true;
@@ -189,6 +190,7 @@ class EditorFileSystem : public Node {
 	bool revalidate_import_files = false;
 	int nb_files_total = 0;
 
+	void _notify_filesystem_changed();
 	void _scan_filesystem();
 	void _first_scan_filesystem();
 	void _first_scan_process_scripts(const ScannedDirectory *p_scan_dir, List<String> &p_gdextension_extensions, HashSet<String> &p_existing_class_names, HashSet<String> &p_extensions);