From ea3479dac52934e749013b16f7f199d54732ec01 Mon Sep 17 00:00:00 2001 From: David White Date: Wed, 24 May 2017 22:22:42 -0700 Subject: [PATCH] made it so --desktop-fullscreen is not persistent, because that's as annoying as hell --- .../login_controller_base.cfg | 2 +- modules/tbs/data/objects/settings_screen.cfg | 3 ++- src/main.cpp | 4 ++-- src/preferences.cpp | 20 +++++++++++++++++-- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/modules/tbs/data/object_prototypes/login_controller_base.cfg b/modules/tbs/data/object_prototypes/login_controller_base.cfg index 9383429b5..c81799816 100644 --- a/modules/tbs/data/object_prototypes/login_controller_base.cfg +++ b/modules/tbs/data/object_prototypes/login_controller_base.cfg @@ -72,7 +72,7 @@ ]", _toggle_fullscreen: "def() ->commands [ - game_preferences().set_preference_value('desktop_fullscreen', not game_preferences().get_bool_preference_value('desktop_fullscreen')); + game_preferences().set_preference_value('desktop_fullscreen', not game_preferences().get_bool_preference_value('desktop_fullscreen'), [enum persistent]); game_preferences().save_preferences(); update_and_restart() diff --git a/modules/tbs/data/objects/settings_screen.cfg b/modules/tbs/data/objects/settings_screen.cfg index e1757e1c8..2949a361d 100644 --- a/modules/tbs/data/objects/settings_screen.cfg +++ b/modules/tbs/data/objects/settings_screen.cfg @@ -65,7 +65,8 @@ set(_need_restart, not _need_restart); - _preferences.set_preference_value('desktop_fullscreen', value); + debug(['SET PREFERENCE', value]); + _preferences.set_preference_value('desktop_fullscreen', value, [enum persistent]); _preferences.save_preferences() ]", diff --git a/src/main.cpp b/src/main.cpp index 9f51629f8..466877209 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -137,8 +137,8 @@ namespace PREF_INT(auto_size_ideal_width, 0, ""); PREF_INT(auto_size_ideal_height, 0, ""); - PREF_BOOL_PERSISTENT(desktop_fullscreen, false, "Sets the game window to be a fullscreen window the size of the desktop"); - PREF_BOOL_PERSISTENT(desktop_fullscreen_force, false, "(Windows) forces desktop fullscreen to actually use fullscreen rather than a borderless window the size of the desktop"); + PREF_BOOL(desktop_fullscreen, false, "Sets the game window to be a fullscreen window the size of the desktop"); + PREF_BOOL(desktop_fullscreen_force, false, "(Windows) forces desktop fullscreen to actually use fullscreen rather than a borderless window the size of the desktop"); PREF_BOOL(msaa, false, "Use msaa"); diff --git a/src/preferences.cpp b/src/preferences.cpp index 15401b8de..0171adf14 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -892,9 +892,10 @@ namespace preferences } for(std::map::iterator i = g_registered_settings().begin(); i != g_registered_settings().end(); ++i) { - if(i->second.persistent && node.has_key(i->first)) { + if(node.has_key(i->first)) { i->second.read(node[i->first]); i->second.has_been_set_from_persistent = true; + i->second.persistent = true; } } @@ -1346,13 +1347,28 @@ namespace preferences return variant(*it->second.double_value); END_DEFINE_FN - BEGIN_DEFINE_FN(set_preference_value, "(string, any)->commands") + BEGIN_DEFINE_FN(set_preference_value, "(string, any, null|[enum {persistent}]=null)->commands") const std::string key = FN_ARG(0).as_string(); variant val = FN_ARG(1); auto it = g_registered_settings().find(key); ASSERT_LOG(it != g_registered_settings().end(), "Unknown preference setting: " << key); + bool force_persistent = false; + + if(NUM_FN_ARGS > 2 && FN_ARG(2).is_list()) { + variant flags = FN_ARG(2); + for(variant flag : flags.as_list()) { + if(flag.as_enum() == "persistent") { + force_persistent = true; + } + } + } + return variant(new game_logic::FnCommandCallable("set_preference_value", [=]() { + if(force_persistent) { + it->second.persistent = true; + } + if(it->second.int_value) { *it->second.int_value = val.as_int(); } else if(it->second.bool_value) {