Allow loading custom ProjectSettings instance

This commit is contained in:
kobewi 2023-03-18 02:39:12 +01:00
parent 11d3768132
commit 4324d01c8e
3 changed files with 20 additions and 9 deletions

View File

@ -1017,7 +1017,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust
} }
} }
// Check for the existence of a csproj file. // 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 there is a csproj file, add the C# feature if it doesn't already exist.
if (!project_features.has("C#")) { if (!project_features.has("C#")) {
project_features.append("C#"); project_features.append("C#");
@ -1568,6 +1568,14 @@ ProjectSettings::ProjectSettings() {
ProjectSettings::get_singleton()->add_hidden_prefix("input/"); ProjectSettings::get_singleton()->add_hidden_prefix("input/");
} }
ProjectSettings::~ProjectSettings() { ProjectSettings::ProjectSettings(const String &p_path) {
singleton = nullptr; if (load_custom(p_path) == OK) {
project_loaded = true;
}
}
ProjectSettings::~ProjectSettings() {
if (singleton == this) {
singleton = nullptr;
}
} }

View File

@ -224,6 +224,7 @@ public:
#endif #endif
ProjectSettings(); ProjectSettings();
ProjectSettings(const String &p_path);
~ProjectSettings(); ~ProjectSettings();
}; };

View File

@ -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"); const String project_godot = project_list->get_selected_projects()[0].path.path_join("project.godot");
Error err = cfg.load(project_godot); ProjectSettings *cfg = memnew(ProjectSettings(project_godot));
if (err != OK) { if (!cfg->is_project_loaded()) {
tag_edit_error->set_text(vformat(TTR("Couldn't load project at '%s' (error %d). It may be missing or corrupted."), project_godot, err)); 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(); tag_edit_error->show();
callable_mp((Window *)tag_manage_dialog, &Window::show).call_deferred(); // Make sure the dialog does not disappear. callable_mp((Window *)tag_manage_dialog, &Window::show).call_deferred(); // Make sure the dialog does not disappear.
return; return;
} else { } else {
tags.sort(); tags.sort();
cfg.set_value("application", "config/tags", tags); cfg->set("application/config/tags", tags);
err = cfg.save(project_godot); Error err = cfg->save_custom(project_godot);
memdelete(cfg);
if (err != OK) { if (err != OK) {
tag_edit_error->set_text(vformat(TTR("Couldn't save project at '%s' (error %d)."), project_godot, err)); tag_edit_error->set_text(vformat(TTR("Couldn't save project at '%s' (error %d)."), project_godot, err));
tag_edit_error->show(); tag_edit_error->show();