summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkobewi <kobewi4e@gmail.com>2024-04-19 00:09:15 +0200
committerkobewi <kobewi4e@gmail.com>2024-04-19 00:13:06 +0200
commit12f39befa973ddafdfe1fef10887887b6b2442f6 (patch)
tree7f13747cfb052292e1395c1d83c8f47de5d38bfe
parent9bc49a66bae5e9e506f12df3b3e141c8da13f983 (diff)
downloadredot-engine-12f39befa973ddafdfe1fef10887887b6b2442f6.tar.gz
Use minor version in EditorSettings file name
-rw-r--r--editor/editor_settings.cpp33
-rw-r--r--editor/editor_settings.h2
-rw-r--r--main/main.cpp8
3 files changed, 33 insertions, 10 deletions
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 452715a577..cc44236192 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -989,6 +989,29 @@ EditorSettings *EditorSettings::get_singleton() {
return singleton.ptr();
}
+String EditorSettings::get_existing_settings_path() {
+ const String config_dir = EditorPaths::get_singleton()->get_config_dir();
+ int minor = VERSION_MINOR;
+ String filename;
+
+ do {
+ if (VERSION_MAJOR == 4 && minor < 3) {
+ // Minor version is used since 4.3, so special case to load older settings.
+ filename = vformat("editor_settings-%d.tres", VERSION_MAJOR);
+ minor = -1;
+ } else {
+ filename = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, minor);
+ minor--;
+ }
+ } while (minor >= 0 && !FileAccess::exists(config_dir.path_join(filename)));
+ return config_dir.path_join(filename);
+}
+
+String EditorSettings::get_newest_settings_path() {
+ const String config_file_name = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, VERSION_MINOR);
+ return EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name);
+}
+
void EditorSettings::create() {
// IMPORTANT: create() *must* create a valid EditorSettings singleton,
// as the rest of the engine code will assume it. As such, it should never
@@ -1016,16 +1039,16 @@ void EditorSettings::create() {
if (EditorPaths::get_singleton()->are_paths_valid()) {
// Validate editor config file.
- Ref<DirAccess> dir = DirAccess::open(EditorPaths::get_singleton()->get_config_dir());
- ERR_FAIL_COND(dir.is_null());
+ ERR_FAIL_COND(!DirAccess::dir_exists_absolute(EditorPaths::get_singleton()->get_config_dir()));
- String config_file_name = "editor_settings-" + itos(VERSION_MAJOR) + ".tres";
- config_file_path = EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name);
- if (!dir->file_exists(config_file_name)) {
+ config_file_path = get_existing_settings_path();
+ if (!FileAccess::exists(config_file_path)) {
+ config_file_path = get_newest_settings_path();
goto fail;
}
singleton = ResourceLoader::load(config_file_path, "EditorSettings");
+ singleton->set_path(get_newest_settings_path()); // Settings can be loaded from older version file, so make sure it's newest.
if (singleton.is_null()) {
ERR_PRINT("Could not load editor settings from path: " + config_file_path);
diff --git a/editor/editor_settings.h b/editor/editor_settings.h
index a058f91be8..6a329f6979 100644
--- a/editor/editor_settings.h
+++ b/editor/editor_settings.h
@@ -124,6 +124,8 @@ public:
};
static EditorSettings *get_singleton();
+ static String get_existing_settings_path();
+ static String get_newest_settings_path();
static void create();
void setup_language();
diff --git a/main/main.cpp b/main/main.cpp
index 801e8934b0..78a539fff7 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -2518,12 +2518,10 @@ Error Main::setup2() {
// Editor setting class is not available, load config directly.
if (!init_use_custom_screen && (editor || project_manager) && EditorPaths::get_singleton()->are_paths_valid()) {
- Ref<DirAccess> dir = DirAccess::open(EditorPaths::get_singleton()->get_config_dir());
- ERR_FAIL_COND_V(dir.is_null(), FAILED);
+ ERR_FAIL_COND_V(!DirAccess::dir_exists_absolute(EditorPaths::get_singleton()->get_config_dir()), FAILED);
- String config_file_name = "editor_settings-" + itos(VERSION_MAJOR) + ".tres";
- String config_file_path = EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name);
- if (dir->file_exists(config_file_name)) {
+ String config_file_path = EditorSettings::get_existing_settings_path();
+ if (FileAccess::exists(config_file_path)) {
Error err;
Ref<FileAccess> f = FileAccess::open(config_file_path, FileAccess::READ, &err);
if (f.is_valid()) {