diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index f7f26fa3d1e..3b11b9aafda 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -900,6 +900,7 @@ void EditorNode::_notification(int p_what) { } EditorHelp::save_script_doc_cache(); editor_data.save_editor_external_data(); + EditorSettings::get_singleton()->save_project_metadata(); FileAccess::set_file_close_fail_notify_callback(nullptr); log->deinit(); // Do not get messages anymore. editor_data.clear_edited_scenes(); @@ -2118,6 +2119,7 @@ int EditorNode::_save_external_resources(bool p_also_save_external_data) { } } + EditorSettings::get_singleton()->save_project_metadata(); EditorUndoRedoManager::get_singleton()->set_history_as_saved(EditorUndoRedoManager::GLOBAL_HISTORY); _update_unsaved_cache(); diff --git a/editor/settings/editor_settings.cpp b/editor/settings/editor_settings.cpp index 4ab88e4abdc..ea7cf0e07d7 100644 --- a/editor/settings/editor_settings.cpp +++ b/editor/settings/editor_settings.cpp @@ -1555,9 +1555,7 @@ void EditorSettings::set_project_metadata(const String &p_section, const String } } project_metadata->set_value(p_section, p_key, p_data); - - Error err = project_metadata->save(path); - ERR_FAIL_COND_MSG(err != OK, "Cannot save project metadata to file '" + path + "'."); + project_metadata_dirty = true; } Variant EditorSettings::get_project_metadata(const String &p_section, const String &p_key, const Variant &p_default) const { @@ -1571,6 +1569,16 @@ Variant EditorSettings::get_project_metadata(const String &p_section, const Stri return project_metadata->get_value(p_section, p_key, p_default); } +void EditorSettings::save_project_metadata() { + if (!project_metadata_dirty) { + return; + } + const String path = _get_project_metadata_path(); + Error err = project_metadata->save(path); + ERR_FAIL_COND_MSG(err != OK, "Cannot save project metadata to file '" + path + "'."); + project_metadata_dirty = false; +} + void EditorSettings::set_favorites(const Vector &p_favorites) { favorites = p_favorites; String favorites_file; diff --git a/editor/settings/editor_settings.h b/editor/settings/editor_settings.h index 2059b9e31c9..362840a489e 100644 --- a/editor/settings/editor_settings.h +++ b/editor/settings/editor_settings.h @@ -91,6 +91,7 @@ private: HashSet changed_settings; mutable Ref project_metadata; + bool project_metadata_dirty = false; HashMap hints; HashMap props; int last_order; @@ -170,6 +171,7 @@ public: void set_project_metadata(const String &p_section, const String &p_key, const Variant &p_data); Variant get_project_metadata(const String &p_section, const String &p_key, const Variant &p_default) const; + void save_project_metadata(); void set_favorites(const Vector &p_favorites); Vector get_favorites() const;