diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-26 15:12:51 +0200 |
|---|---|---|
| committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-26 15:12:51 +0200 |
| commit | c1907f2d30eace450dff31125220c880f0588f49 (patch) | |
| tree | 14a845d15c27d6a9d3d30c717ab282ac80dc9de0 | |
| parent | 7cb52a676f3f3dbfb22a67b69810b6056e6ecc9d (diff) | |
| parent | 4324d01c8e7d53718d0f2232d781098650c75f05 (diff) | |
| download | redot-engine-c1907f2d30eace450dff31125220c880f0588f49.tar.gz | |
Merge pull request #75048 from KoBeWi/it's_ok_to_be_loaded
Allow loading custom ProjectSettings instance
| -rw-r--r-- | core/config/project_settings.cpp | 12 | ||||
| -rw-r--r-- | core/config/project_settings.h | 1 | ||||
| -rw-r--r-- | editor/project_manager.cpp | 14 |
3 files changed, 19 insertions, 8 deletions
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 104b17961d..869fef23a5 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1017,7 +1017,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust } } // Check for the existence of a csproj file. - if (_csproj_exists(get_resource_path())) { + if (_csproj_exists(p_path.get_base_dir())) { // If there is a csproj file, add the C# feature if it doesn't already exist. if (!project_features.has("C#")) { project_features.append("C#"); @@ -1568,6 +1568,14 @@ ProjectSettings::ProjectSettings() { ProjectSettings::get_singleton()->add_hidden_prefix("input/"); } +ProjectSettings::ProjectSettings(const String &p_path) { + if (load_custom(p_path) == OK) { + project_loaded = true; + } +} + ProjectSettings::~ProjectSettings() { - singleton = nullptr; + if (singleton == this) { + singleton = nullptr; + } } diff --git a/core/config/project_settings.h b/core/config/project_settings.h index 1bad76acb1..922c88c151 100644 --- a/core/config/project_settings.h +++ b/core/config/project_settings.h @@ -224,6 +224,7 @@ public: #endif ProjectSettings(); + ProjectSettings(const String &p_path); ~ProjectSettings(); }; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 70cef0e345..4fe91d1cc5 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -802,18 +802,20 @@ void ProjectManager::_apply_project_tags() { } } - ConfigFile cfg; const String project_godot = project_list->get_selected_projects()[0].path.path_join("project.godot"); - Error err = cfg.load(project_godot); - if (err != OK) { - tag_edit_error->set_text(vformat(TTR("Couldn't load project at '%s' (error %d). It may be missing or corrupted."), project_godot, err)); + ProjectSettings *cfg = memnew(ProjectSettings(project_godot)); + if (!cfg->is_project_loaded()) { + memdelete(cfg); + tag_edit_error->set_text(vformat(TTR("Couldn't load project at '%s'. It may be missing or corrupted."), project_godot)); tag_edit_error->show(); callable_mp((Window *)tag_manage_dialog, &Window::show).call_deferred(); // Make sure the dialog does not disappear. return; } else { tags.sort(); - cfg.set_value("application", "config/tags", tags); - err = cfg.save(project_godot); + cfg->set("application/config/tags", tags); + Error err = cfg->save_custom(project_godot); + memdelete(cfg); + if (err != OK) { tag_edit_error->set_text(vformat(TTR("Couldn't save project at '%s' (error %d)."), project_godot, err)); tag_edit_error->show(); |
