Merge pull request #8624 from jordan-woyak/setting-expression-input-gate

InputCommon: Only update setting expressions when the input gate is enabled.
This commit is contained in:
Tilka 2020-02-10 00:47:30 +00:00 committed by GitHub
commit 01d69ba81a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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;