summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Config/Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Config/Config.cpp')
-rw-r--r--Source/Core/Common/Config/Config.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp
index 30215aec06..122d2d6ff1 100644
--- a/Source/Core/Common/Config/Config.cpp
+++ b/Source/Core/Common/Config/Config.cpp
@@ -12,6 +12,7 @@ namespace Config
{
static Layers s_layers;
static std::list<ConfigChangedCallback> s_callbacks;
+static u32 s_callback_guards = 0;
Layers* GetLayers()
{
@@ -53,6 +54,9 @@ void AddConfigChangedCallback(ConfigChangedCallback func)
void InvokeConfigChangedCallbacks()
{
+ if (s_callback_guards)
+ return;
+
for (const auto& callback : s_callbacks)
callback();
}
@@ -137,4 +141,18 @@ LayerType GetActiveLayerForConfig(const ConfigLocation& config)
// If config is not present in any layer, base layer is considered active.
return LayerType::Base;
}
+
+ConfigChangeCallbackGuard::ConfigChangeCallbackGuard()
+{
+ ++s_callback_guards;
}
+
+ConfigChangeCallbackGuard::~ConfigChangeCallbackGuard()
+{
+ if (--s_callback_guards)
+ return;
+
+ InvokeConfigChangedCallbacks();
+}
+
+} // namespace Config