diff --git a/Source/Core/DolphinQt/Config/ConfigControls/ConfigChoice.cpp b/Source/Core/DolphinQt/Config/ConfigControls/ConfigChoice.cpp index b1c12a417218..36a17e42b59e 100644 --- a/Source/Core/DolphinQt/Config/ConfigControls/ConfigChoice.cpp +++ b/Source/Core/DolphinQt/Config/ConfigControls/ConfigChoice.cpp @@ -63,7 +63,6 @@ void ConfigStringChoice::Load() const int index = m_text_is_data ? findText(setting_value) : findData(setting_value); // This can be called publicly. - const QSignalBlocker block(this); setCurrentIndex(index); } @@ -145,6 +144,7 @@ void ConfigComplexChoice::UpdateComboIndex() auto it = std::find(m_options.begin(), m_options.end(), values); int index = static_cast(std::distance(m_options.begin(), it)); + // Will crash if not blocked const QSignalBlocker blocker(this); setCurrentIndex(index); } diff --git a/Source/Core/DolphinQt/Config/ConfigControls/ConfigControl.h b/Source/Core/DolphinQt/Config/ConfigControls/ConfigControl.h index 1be0a8fa19e4..508426d258b7 100644 --- a/Source/Core/DolphinQt/Config/ConfigControls/ConfigControl.h +++ b/Source/Core/DolphinQt/Config/ConfigControls/ConfigControl.h @@ -5,7 +5,6 @@ #include #include -#include #include "Common/Config/Enums.h" #include "Common/Config/Layer.h" @@ -49,14 +48,21 @@ class ConfigControl : public Derived bf.setBold(IsConfigLocal()); Derived::setFont(bf); - const QSignalBlocker blocker(this); + // This isn't signal blocked because the UI may need to be updated. + m_updating = true; OnConfigChanged(); + m_updating = false; }); } template void SaveValue(const Config::Info& setting, const T& value) { + // Avoid OnConfigChanged -> option changed to current config's value -> unnecessary save -> + // ConfigChanged. + if (m_updating) + return; + if (m_layer != nullptr) { m_layer->Set(m_location, value); @@ -100,6 +106,7 @@ class ConfigControl : public Derived } } + bool m_updating = false; const Config::Location m_location; Config::Layer* m_layer; };