From c57fc8ee7df9113be6c0857ceff51bfed5b9f8bd Mon Sep 17 00:00:00 2001 From: "Daniel J. Ramirez" Date: Sat, 28 Oct 2017 16:25:28 -0500 Subject: [PATCH] Fixed editor settings disappearing. Some items that are no longer defined may disappear, but thats expected i guess. --- editor/editor_settings.cpp | 25 +++++++++++++++++------ editor/editor_settings.h | 3 +++ modules/mono/editor/godotsharp_builds.cpp | 12 +++++------ modules/mono/editor/godotsharp_editor.cpp | 4 +--- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index bc91fcdf04e..bf4ef3ae394 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -135,6 +135,7 @@ bool EditorSettings::_get(const StringName &p_name, Variant &r_ret) const { void EditorSettings::_initial_set(const StringName &p_name, const Variant &p_value) { set(p_name, p_value); props[p_name].initial = p_value; + props[p_name].initial_set = true; } struct _EVCSort { @@ -214,6 +215,14 @@ void EditorSettings::_add_property_info_bind(const Dictionary &p_info) { } // Default configs +bool EditorSettings::has_default_value(const String &p_setting) const { + + _THREAD_SAFE_METHOD_ + + if (!props.has(p_setting)) + return false; + return props[p_setting].initial_set; +} void EditorSettings::_load_defaults(Ref p_extra_config) { @@ -834,10 +843,10 @@ void EditorSettings::setup_network() { hint += ip; } - set("network/debug/remote_host", lip); + _initial_set("network/debug/remote_host", lip); add_property_hint(PropertyInfo(Variant::STRING, "network/debug/remote_host", PROPERTY_HINT_ENUM, hint)); - set("network/debug/remote_port", port); + _initial_set("network/debug/remote_port", port); add_property_hint(PropertyInfo(Variant::INT, "network/debug/remote_port", PROPERTY_HINT_RANGE, "1,65535,1")); } @@ -915,16 +924,20 @@ void EditorSettings::set_initial_value(const StringName &p_setting, const Varian ERR_FAIL_COND(!props.has(p_setting)); props[p_setting].initial = p_value; + props[p_setting].initial_set = true; } Variant _EDITOR_DEF(const String &p_setting, const Variant &p_default) { + Variant ret = p_default; if (EditorSettings::get_singleton()->has_setting(p_setting)) - return EditorSettings::get_singleton()->get(p_setting); - EditorSettings::get_singleton()->set(p_setting, p_default); - EditorSettings::get_singleton()->set_initial_value(p_setting, p_default); + ret = EditorSettings::get_singleton()->get(p_setting); + if (!EditorSettings::get_singleton()->has_default_value(p_setting)) { + EditorSettings::get_singleton()->set_initial_value(p_setting, p_default); + EditorSettings::get_singleton()->set(p_setting, p_default); + } - return p_default; + return ret; } Variant _EDITOR_GET(const String &p_setting) { diff --git a/editor/editor_settings.h b/editor/editor_settings.h index a74be6494a6..29665369c4b 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -66,11 +66,13 @@ private: int order; Variant variant; Variant initial; + bool initial_set; bool hide_from_editor; bool save; VariantContainer() { order = 0; hide_from_editor = false; + initial_set = false; save = false; } VariantContainer(const Variant &p_variant, int p_order) { @@ -128,6 +130,7 @@ public: static void destroy(); void set_optimize_save(bool p_optimize); + bool has_default_value(const String &p_setting) const; void set_setting(const String &p_setting, const Variant &p_value); Variant get_setting(const String &p_setting) const; bool has_setting(const String &p_setting) const; diff --git a/modules/mono/editor/godotsharp_builds.cpp b/modules/mono/editor/godotsharp_builds.cpp index a26f36d64fc..24247ed3b44 100644 --- a/modules/mono/editor/godotsharp_builds.cpp +++ b/modules/mono/editor/godotsharp_builds.cpp @@ -365,16 +365,14 @@ GodotSharpBuilds::GodotSharpBuilds() { // Build tool settings EditorSettings *ed_settings = EditorSettings::get_singleton(); - if (!ed_settings->has_setting("mono/builds/build_tool")) { - ed_settings->set_setting("mono/builds/build_tool", + EDITOR_DEF("mono/builds/build_tool", #ifdef WINDOWS_ENABLED - // TODO: Default to MSBUILD_MONO if its csc.exe issue is fixed in the installed mono version - MSBUILD + // TODO: Default to MSBUILD_MONO if its csc.exe issue is fixed in the installed mono version + MSBUILD #else - MSBUILD_MONO + MSBUILD_MONO #endif - ); - } + ); ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/builds/build_tool", PROPERTY_HINT_ENUM, #ifdef WINDOWS_ENABLED "MSBuild (Mono),MSBuild (System)" diff --git a/modules/mono/editor/godotsharp_editor.cpp b/modules/mono/editor/godotsharp_editor.cpp index 837dbfde668..1bc1e8a515c 100644 --- a/modules/mono/editor/godotsharp_editor.cpp +++ b/modules/mono/editor/godotsharp_editor.cpp @@ -221,9 +221,7 @@ GodotSharpEditor::GodotSharpEditor(EditorNode *p_editor) { // External editor settings EditorSettings *ed_settings = EditorSettings::get_singleton(); - if (!ed_settings->has_setting("mono/editor/external_editor")) { - ed_settings->set_setting("mono/editor/external_editor", EDITOR_NONE); - } + EDITOR_DEF("mono/editor/external_editor", EDITOR_NONE); ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/editor/external_editor", PROPERTY_HINT_ENUM, "None,MonoDevelop,Visual Studio Code")); }