From b8f917def2ac2f1f1f8ab99b0f44bb29441ad5bb Mon Sep 17 00:00:00 2001 From: danielsuss Date: Fri, 13 Jun 2025 15:12:33 +0100 Subject: [PATCH] Enhance grave modifier key support and fix missing key definitions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add missing grave key definitions in KeySequence class - Improve key type mapping for grave modifier - Ensure consistent grave modifier behavior across GUI and core 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/gui/src/KeySequence.cpp | 16 ++++++++++++++++ src/gui/src/KeySequence.h | 3 +++ src/lib/barrier/key_types.cpp | 1 + src/lib/barrier/key_types.h | 5 ++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/gui/src/KeySequence.cpp b/src/gui/src/KeySequence.cpp index ddf7d332..3ef93926 100644 --- a/src/gui/src/KeySequence.cpp +++ b/src/gui/src/KeySequence.cpp @@ -139,6 +139,19 @@ bool KeySequence::appendKey(int key, int modifiers) } break; + case Qt::Key_QuoteLeft: + { + printf("GRAVE DEBUG: Qt::Key_QuoteLeft detected in GUI\n"); + int mod = GraveModifier & (~m_Modifiers); + if (mod) + { + printf("GRAVE DEBUG: Adding GraveModifier to sequence: %08x\n", mod); + m_Sequence.append(mod); + m_Modifiers |= mod; + } + } + break; + default: // see if we can handle this key, if not, don't accept it if (keyToString(key).isEmpty()) @@ -210,6 +223,9 @@ QString KeySequence::keyToString(int key) if (key & Qt::MetaModifier) return "Meta"; + if (key & GraveModifier) + return "Grave"; + // treat key pad like normal keys (FIXME: we should have another lookup table for keypad keys instead) key &= ~Qt::KeypadModifier; diff --git a/src/gui/src/KeySequence.h b/src/gui/src/KeySequence.h index 03310918..56c3f0bf 100644 --- a/src/gui/src/KeySequence.h +++ b/src/gui/src/KeySequence.h @@ -25,6 +25,9 @@ class QSettings; +// Custom modifier for grave key (not supported by Qt) +static const int GraveModifier = 0x20000000; + class KeySequence { public: diff --git a/src/lib/barrier/key_types.cpp b/src/lib/barrier/key_types.cpp index 33ee3ebc..06e9d5e9 100644 --- a/src/lib/barrier/key_types.cpp +++ b/src/lib/barrier/key_types.cpp @@ -209,6 +209,7 @@ const KeyModifierNameMapEntry kModifierNameMap[] = { { "AltGr", KeyModifierAltGr }, // { "CapsLock", KeyModifierCapsLock }, { "Control", KeyModifierControl }, + { "Grave", KeyModifierGrave }, { "Meta", KeyModifierMeta }, // { "NumLock", KeyModifierNumLock }, // { "ScrollLock", KeyModifierScrollLock }, diff --git a/src/lib/barrier/key_types.h b/src/lib/barrier/key_types.h index 863dc174..39635a6b 100644 --- a/src/lib/barrier/key_types.h +++ b/src/lib/barrier/key_types.h @@ -58,6 +58,7 @@ static const KeyModifierMask KeyModifierMeta = 0x0008; static const KeyModifierMask KeyModifierSuper = 0x0010; static const KeyModifierMask KeyModifierAltGr = 0x0020; static const KeyModifierMask KeyModifierLevel5Lock = 0x0040; +static const KeyModifierMask KeyModifierGrave = 0x0080; static const KeyModifierMask KeyModifierCapsLock = 0x1000; static const KeyModifierMask KeyModifierNumLock = 0x2000; static const KeyModifierMask KeyModifierScrollLock = 0x4000; @@ -73,6 +74,7 @@ static const UInt32 kKeyModifierBitMeta = 3; static const UInt32 kKeyModifierBitSuper = 4; static const UInt32 kKeyModifierBitAltGr = 5; static const UInt32 kKeyModifierBitLevel5Lock = 6; +static const UInt32 kKeyModifierBitGrave = 7; static const UInt32 kKeyModifierBitCapsLock = 12; static const UInt32 kKeyModifierBitNumLock = 13; static const UInt32 kKeyModifierBitScrollLock = 14; @@ -88,7 +90,8 @@ static const KeyModifierID kKeyModifierIDAlt = 3; static const KeyModifierID kKeyModifierIDMeta = 4; static const KeyModifierID kKeyModifierIDSuper = 5; static const KeyModifierID kKeyModifierIDAltGr = 6; -static const KeyModifierID kKeyModifierIDLast = 7; +static const KeyModifierID kKeyModifierIDGrave = 7; +static const KeyModifierID kKeyModifierIDLast = 8; //@} //! @name Key identifiers