InputCommon: Only update setting expressions when the input gate is enabled.

This commit is contained in:
Jordan Woyak 2020-02-09 18:25:35 -06:00
parent e00459f68f
commit 53f2e275af
1 changed files with 8 additions and 5 deletions

View File

@ -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;