diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2020-12-01 12:59:21 +0100 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2020-12-02 11:09:09 +0100 |
commit | 2dc642d3f97bf457d7cf57265a35eb8b1bd83a8d (patch) | |
tree | 1d1d50d9bfe2c4a301889e3a2ba09c5b866f6161 /src | |
parent | 97d8dc52b497c5202742280bfd2cf5fa54eb0302 (diff) | |
download | qtwebengine-2dc642d3f97bf457d7cf57265a35eb8b1bd83a8d.tar.gz |
Forward modifier flags for lock keys
Fixes: QTBUG-89001
Change-Id: I9f336313b075ad0cb3115975afc410beb415e4a0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/web_event_factory.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 798ee9633..77d3b56b7 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1280,6 +1280,29 @@ static unsigned mouseButtonsModifiersForEvent(const T* event) return ret; } +static WebInputEvent::Modifiers lockKeyModifiers(const quint32 nativeModifiers) +{ + unsigned result = 0; + if (keyboardDriver() == KeyboardDriver::Xkb) { + if (nativeModifiers & 0x42) /* Caps_Lock */ + result |= WebInputEvent::kCapsLockOn; + if (nativeModifiers & 0x4d) /* Num_Lock */ + result |= WebInputEvent::kNumLockOn; + } else if (keyboardDriver() == KeyboardDriver::Windows) { + if (nativeModifiers & 0x100) /* CapsLock */ + result |= WebInputEvent::kCapsLockOn; + if (nativeModifiers & 0x200) /* NumLock */ + result |= WebInputEvent::kNumLockOn; + if (nativeModifiers & 0x400) /* ScrollLock */ + result |= WebInputEvent::kScrollLockOn; + } else if (keyboardDriver() == KeyboardDriver::Cocoa) { + if (nativeModifiers & 0x10000) /* NSEventModifierFlagCapsLock */ + result |= WebInputEvent::kCapsLockOn; + } + + return static_cast<WebInputEvent::Modifiers>(result); +} + // If only a modifier key is pressed, Qt only reports the key code. // But Chromium also expects the modifier being set. static inline WebInputEvent::Modifiers modifierForKeyCode(int key) @@ -1328,13 +1351,14 @@ static inline WebInputEvent::Modifiers modifiersForEvent(const QInputEvent* even if (keyEvent->isAutoRepeat()) result |= WebInputEvent::kIsAutoRepeat; result |= modifierForKeyCode(qtKeyForKeyEvent(keyEvent)); + result |= lockKeyModifiers(keyEvent->nativeModifiers()); break; } default: break; } - return (WebInputEvent::Modifiers)result; + return static_cast<WebInputEvent::Modifiers>(result); } static inline Qt::KeyboardModifiers keyboardModifiersForModifier(unsigned int modifier) |