summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkobewi <kobewi4e@gmail.com>2023-03-18 02:39:12 +0100
committerkobewi <kobewi4e@gmail.com>2024-04-26 11:34:37 +0200
commit4324d01c8e7d53718d0f2232d781098650c75f05 (patch)
tree22693d0750dc242d822acafb8e983a10f00790f4
parent11d3768132582d192b8464769f26b493ae822321 (diff)
downloadredot-engine-4324d01c8e7d53718d0f2232d781098650c75f05.tar.gz
Allow loading custom ProjectSettings instance
-rw-r--r--core/config/project_settings.cpp12
-rw-r--r--core/config/project_settings.h1
-rw-r--r--editor/project_manager.cpp14
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();