summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Config/Config.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2019-03-03 10:58:37 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2019-03-03 17:35:22 -0600
commitbbc6bf5294f829d62ef61244c315c2886c54c790 (patch)
tree05a576e2923dfc842bd8a38e17a1fd762618bd3b /Source/Core/Common/Config/Config.cpp
parent2a3c0753303a9f4cd79a92cd94b6a22298b516d6 (diff)
Common/Config: Add a utility class to suppress config change callbacks.
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