summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h13
1 files 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<ValueType>();
+ // 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<ValueType>();
+
+ 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<ValueType> m_value = {};
+ mutable std::atomic<ValueType> m_value = {};
// Unfortunately InputReference's state grabbing is non-const requiring mutable here.
mutable InputReference m_input;