diff options
| author | Dentomologist <dentomologist@gmail.com> | 2025-04-25 15:11:53 -0700 |
|---|---|---|
| committer | Dentomologist <dentomologist@gmail.com> | 2025-04-25 16:00:43 -0700 |
| commit | d0dc8ae5e1bfeec1dd3d19c5ddd532ac4156b66b (patch) | |
| tree | 064ac84be4d902eae8c5d2a26619933a9b2bdbeb /Source/Core | |
| parent | 9db4067957729040f6100399d206f8a471d131b7 (diff) | |
FreeLook: Remove ConfigChangedCallback on shutdown
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/FreeLookConfig.cpp | 20 | ||||
| -rw-r--r-- | Source/Core/Core/FreeLookConfig.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/FreeLookManager.cpp | 3 |
3 files changed, 19 insertions, 5 deletions
diff --git a/Source/Core/Core/FreeLookConfig.cpp b/Source/Core/Core/FreeLookConfig.cpp index a74b492f7d..56aadb9af2 100644 --- a/Source/Core/Core/FreeLookConfig.cpp +++ b/Source/Core/Core/FreeLookConfig.cpp @@ -3,6 +3,8 @@ #include "Core/FreeLookConfig.h" +#include <optional> + #include "Core/AchievementManager.h" #include "Core/CPUThreadConfigCallback.h" #include "Core/Config/AchievementSettings.h" @@ -14,7 +16,8 @@ namespace FreeLook { static Config s_config; static Config s_active_config; -static bool s_has_registered_callback = false; +static std::optional<CPUThreadConfigCallback::ConfigChangedCallbackID> + s_config_changed_callback_id = std::nullopt; Config& GetConfig() { @@ -39,14 +42,23 @@ Config::Config() void Config::Refresh() { - if (!s_has_registered_callback) + if (!s_config_changed_callback_id.has_value()) { - CPUThreadConfigCallback::AddConfigChangedCallback([] { s_config.Refresh(); }); - s_has_registered_callback = true; + s_config_changed_callback_id = + CPUThreadConfigCallback::AddConfigChangedCallback([] { s_config.Refresh(); }); } camera_config.control_type = ::Config::Get(::Config::FL1_CONTROL_TYPE); enabled = ::Config::Get(::Config::FREE_LOOK_ENABLED) && !AchievementManager::GetInstance().IsHardcoreModeActive(); } + +void Config::Shutdown() +{ + if (!s_config_changed_callback_id.has_value()) + return; + + CPUThreadConfigCallback::RemoveConfigChangedCallback(*s_config_changed_callback_id); + s_config_changed_callback_id.reset(); +} } // namespace FreeLook diff --git a/Source/Core/Core/FreeLookConfig.h b/Source/Core/Core/FreeLookConfig.h index b6c241ae34..5819d81269 100644 --- a/Source/Core/Core/FreeLookConfig.h +++ b/Source/Core/Core/FreeLookConfig.h @@ -27,6 +27,7 @@ struct Config final { Config(); void Refresh(); + void Shutdown(); CameraConfig camera_config; bool enabled; diff --git a/Source/Core/Core/FreeLookManager.cpp b/Source/Core/Core/FreeLookManager.cpp index 0eb85a5d33..58b71b708f 100644 --- a/Source/Core/Core/FreeLookManager.cpp +++ b/Source/Core/Core/FreeLookManager.cpp @@ -325,8 +325,9 @@ InputConfig* GetInputConfig() void Shutdown() { s_config.UnregisterHotplugCallback(); - s_config.ClearControllers(); + + GetConfig().Shutdown(); } void Initialize() |
