aboutsummaryrefslogtreecommitdiff
path: root/include/keymap/KeySeqParser.hpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-03-18 20:52:36 +0530
committerAkshay Nair <phenax5@gmail.com>2025-03-18 20:52:36 +0530
commit056b0b16947ac19a0c425aa9d2ff8f589378d3bc (patch)
treed062dc2de09711c1f7e980fc8475c19a97ff7d99 /include/keymap/KeySeqParser.hpp
parentdd6590a0fda614fa2fb0ca9e4ad11b086393372e (diff)
downloadnull-browser-056b0b16947ac19a0c425aa9d2ff8f589378d3bc.tar.gz
null-browser-056b0b16947ac19a0c425aa9d2ff8f589378d3bc.zip
Add keymap evaluation with strict event filter
Diffstat (limited to '')
-rw-r--r--include/keymap/KeySeqParser.hpp26
1 files changed, 25 insertions, 1 deletions
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 <QtCore/qnamespace.h>
#include <QtCore>
+#include <cmath>
struct KeyChord {
Qt::KeyboardModifiers mod;
@@ -9,11 +10,34 @@ struct KeyChord {
};
bool operator==(const KeyChord a, const KeyChord b);
+typedef QList<KeyChord> 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<KeyChord> parse(QString keySequence);
+ KeySequence parse(QString keySequence);
private:
Qt::Key parseKey(QString keyName);