diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-02 17:02:18 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-04 12:52:15 +0200 |
| commit | 83669b23c371ee0bdea178fce9920585dd55704b (patch) | |
| tree | 98d09b34dd5c0da4196620296757ce5e26095bcd /src/keymap.h | |
| parent | d217d976ccdc439803003a26252904ca8abdd520 (diff) | |
| download | qtmaildir-83669b23c371ee0bdea178fce9920585dd55704b.tar.gz qtmaildir-83669b23c371ee0bdea178fce9920585dd55704b.zip | |
feat: add KeyMap with defaults and INI overrides
Maps key sequences to action name strings, with hardcoded vim-style
defaults and QSettings-based [keys] overrides. Unknown actions and
unparseable sequences are collected as warnings rather than treated
as fatal, so a typo in the config cannot silently misbind or crash.
Note: QKeySequence::fromString() on Qt 6.11 does not return an empty
sequence for unparseable input (e.g. "NotAKey++") -- it returns a
non-empty sequence whose toString() is empty. Detection uses that
instead of isEmpty().
Diffstat (limited to 'src/keymap.h')
| -rw-r--r-- | src/keymap.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/keymap.h b/src/keymap.h new file mode 100644 index 0000000..3f0f85c --- /dev/null +++ b/src/keymap.h @@ -0,0 +1,32 @@ +#pragma once + +#include <QHash> +#include <QKeySequence> +#include <QStringList> + +class QSettings; + +/// Maps key sequences to action names. Action names are plain strings so this +/// class has no dependency on the widgets that implement the actions. +class KeyMap +{ +public: + /// Every action name the application understands. loadOverrides() rejects + /// anything not in this set, so a typo in the config cannot bind silently. + static QStringList knownActions(); + + void loadDefaults(); + + /// Reads the [keys] group. Invalid sequences and unknown action names are + /// collected into warnings() rather than throwing or aborting. + void loadOverrides(QSettings &settings); + + /// Empty string when nothing is bound. + QString actionFor(const QKeySequence &sequence) const; + + QStringList warnings() const { return m_warnings; } + +private: + QHash<QKeySequence, QString> m_bindings; + QStringList m_warnings; +}; |
