summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2020-01-26 13:58:20 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2020-09-25 20:29:18 -0500
commitd8ad8c386121e9c937360b102289231d86693dd1 (patch)
tree9dffa8c6a38dd3b1de31d0236b35f76011b2664d /Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
parentaae913fbc6da714b3777e3a3c20fd06d1e423a0e (diff)
InputCommon: Make hotkeys and input detection aware of Ctrl -> L_Ctrl / R_Ctrl hierarchy.
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.cpp')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index 9e36c49a05..cbc4a1462b 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -291,9 +291,14 @@ bool HotkeySuppressions::IsSuppressedIgnoringModifiers(Device::Input* input,
auto it = m_suppressions.lower_bound({input, nullptr});
auto it_end = m_suppressions.lower_bound({input + 1, nullptr});
+ // We need to ignore L_Ctrl R_Ctrl when supplied Ctrl and vice-versa.
+ const auto is_same_modifier = [](Device::Input* i1, Device::Input* i2) {
+ return i1 == i2 || i1->IsChild(i2) || i2->IsChild(i1);
+ };
+
return std::any_of(it, it_end, [&](auto& s) {
return std::none_of(begin(ignore_modifiers), end(ignore_modifiers),
- [&](auto& m) { return m->GetInput() == s.first.second; });
+ [&](auto& m) { return is_same_modifier(m->GetInput(), s.first.second); });
});
}