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 + #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 + 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()