diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index a2a9fb3eca..d0b3aadf1a 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(); @@ -2278,6 +2279,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 ff2e664be2..3f78ac9c52 100644 --- a/editor/settings/editor_settings.cpp +++ b/editor/settings/editor_settings.cpp @@ -1563,9 +1563,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 { @@ -1579,6 +1577,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 df65c26719..ee48ad87d1 100644 --- a/editor/settings/editor_settings.h +++ b/editor/settings/editor_settings.h @@ -92,6 +92,7 @@ private: mutable String auto_language; mutable Ref project_metadata; + bool project_metadata_dirty = false; HashMap hints; HashMap props; int last_order; @@ -171,6 +172,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;