From 056b0b16947ac19a0c425aa9d2ff8f589378d3bc Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Tue, 18 Mar 2025 20:52:36 +0530 Subject: Add keymap evaluation with strict event filter --- include/keymap/KeySeqParser.hpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'include/keymap/KeySeqParser.hpp') diff --git a/include/keymap/KeySeqParser.hpp b/include/keymap/KeySeqParser.hpp index aefcb62..fac2546 100644 --- a/include/keymap/KeySeqParser.hpp +++ b/include/keymap/KeySeqParser.hpp @@ -2,6 +2,7 @@ #include #include +#include struct KeyChord { Qt::KeyboardModifiers mod; @@ -9,11 +10,34 @@ struct KeyChord { }; bool operator==(const KeyChord a, const KeyChord b); +typedef QList KeySequence; + +enum KeyMatchType { + NoMatch, + Match, + Pending, +}; + class KeySeqParser { +public: + static const KeyMatchType keySequenceMatch(const KeySequence target, + const KeySequence current) { + for (int i = 0; i < target.length(); i++) { + if (current.length() <= i) + return KeyMatchType::Pending; + + if (target[i].key != current[i].key || + !target[i].mod.testFlags(current[i].mod)) + return KeyMatchType::NoMatch; + } + + return KeyMatchType::Match; + } + public: KeySeqParser(); - QList parse(QString keySequence); + KeySequence parse(QString keySequence); private: Qt::Key parseKey(QString keyName); -- cgit v1.3.1