From 53f2e275afc07af7db19c1a53d74383b95ae6253 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sun, 9 Feb 2020 18:25:35 -0600 Subject: [PATCH] InputCommon: Only update setting expressions when the input gate is enabled. --- .../ControllerEmu/Setting/NumericSetting.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h index c7298391f4..f049ddc565 100644 --- a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h +++ b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h @@ -158,10 +158,13 @@ class SettingValue public: ValueType GetValue() const { - if (IsSimpleValue()) - return m_value; - else - return m_input.GetState(); + // Only update dynamic values when the input gate is enabled. + // Otherwise settings will all change to 0 when window focus is lost. + // This is very undesirable for things like battery level or attached extension. + if (!IsSimpleValue() && ControlReference::GetInputGate()) + m_value = m_input.GetState(); + + return m_value; } bool IsSimpleValue() const { return m_input.GetExpression().empty(); } @@ -176,7 +179,7 @@ private: } // Values are R/W by both UI and CPU threads. - std::atomic m_value = {}; + mutable std::atomic m_value = {}; // Unfortunately InputReference's state grabbing is non-const requiring mutable here. mutable InputReference m_input;