Skip to content

Commit dc4e5d6

Browse files
committed
Merge pull request godotengine#75048 from KoBeWi/it's_ok_to_be_loaded
Allow loading custom ProjectSettings instance
2 parents 23dbe8e + 31182da commit dc4e5d6

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

core/config/project_settings.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust
10171017
}
10181018
}
10191019
// Check for the existence of a csproj file.
1020-
if (_csproj_exists(get_resource_path())) {
1020+
if (_csproj_exists(p_path.get_base_dir())) {
10211021
// If there is a csproj file, add the C# feature if it doesn't already exist.
10221022
if (!project_features.has("C#")) {
10231023
project_features.append("C#");
@@ -1568,6 +1568,14 @@ ProjectSettings::ProjectSettings() {
15681568
ProjectSettings::get_singleton()->add_hidden_prefix("input/");
15691569
}
15701570

1571+
ProjectSettings::ProjectSettings(const String &p_path) {
1572+
if (load_custom(p_path) == OK) {
1573+
project_loaded = true;
1574+
}
1575+
}
1576+
15711577
ProjectSettings::~ProjectSettings() {
1572-
singleton = nullptr;
1578+
if (singleton == this) {
1579+
singleton = nullptr;
1580+
}
15731581
}

core/config/project_settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ class ProjectSettings : public Object {
224224
#endif
225225

226226
ProjectSettings();
227+
ProjectSettings(const String &p_path);
227228
~ProjectSettings();
228229
};
229230

editor/project_manager.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -802,18 +802,20 @@ void ProjectManager::_apply_project_tags() {
802802
}
803803
}
804804

805-
ConfigFile cfg;
806805
const String project_godot = project_list->get_selected_projects()[0].path.path_join("project.godot");
807-
Error err = cfg.load(project_godot);
808-
if (err != OK) {
809-
tag_edit_error->set_text(vformat(TTR("Couldn't load project at '%s' (error %d). It may be missing or corrupted."), project_godot, err));
806+
ProjectSettings *cfg = memnew(ProjectSettings(project_godot));
807+
if (!cfg->is_project_loaded()) {
808+
memdelete(cfg);
809+
tag_edit_error->set_text(vformat(TTR("Couldn't load project at '%s'. It may be missing or corrupted."), project_godot));
810810
tag_edit_error->show();
811811
callable_mp((Window *)tag_manage_dialog, &Window::show).call_deferred(); // Make sure the dialog does not disappear.
812812
return;
813813
} else {
814814
tags.sort();
815-
cfg.set_value("application", "config/tags", tags);
816-
err = cfg.save(project_godot);
815+
cfg->set("application/config/tags", tags);
816+
Error err = cfg->save_custom(project_godot);
817+
memdelete(cfg);
818+
817819
if (err != OK) {
818820
tag_edit_error->set_text(vformat(TTR("Couldn't save project at '%s' (error %d)."), project_godot, err));
819821
tag_edit_error->show();

0 commit comments

Comments
 (0)