summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorDentomologist <dentomologist@gmail.com>2025-04-25 15:11:53 -0700
committerDentomologist <dentomologist@gmail.com>2025-04-25 16:00:43 -0700
commitd0dc8ae5e1bfeec1dd3d19c5ddd532ac4156b66b (patch)
tree064ac84be4d902eae8c5d2a26619933a9b2bdbeb /Source/Core
parent9db4067957729040f6100399d206f8a471d131b7 (diff)
FreeLook: Remove ConfigChangedCallback on shutdown
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/FreeLookConfig.cpp20
-rw-r--r--Source/Core/Core/FreeLookConfig.h1
-rw-r--r--Source/Core/Core/FreeLookManager.cpp3
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()