diff options
author | Gatis Paeglis <gatis.paeglis@qt.io> | 2019-01-16 14:42:50 +0100 |
---|---|---|
committer | Gatis Paeglis <gatis.paeglis@qt.io> | 2019-04-17 06:28:58 +0000 |
commit | 35880c7e1021a379e3cdd4005edd53472b63856c (patch) | |
tree | 884a9f8839c712c1be44a080cf3844267bf5176b /src/client/qwaylandinputdevice_p.h | |
parent | 458bc86f82f8fa6cfd659950549d1d2b36e5e40d (diff) |
rework key handling
- Document the magical 8 keycode offset in QKeyEvent::nativeScanCode()
- Check if we are working with the expected keymap format.
- Rename sendKey() to handleKey() as that is typical naming convention
for events that are passed to QWindowSystemInterface.
- WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP is in the bundled xml so use it
in send_keymap()
- Rename toWaylandXkbV1Key() to toWaylandKey() as previous name was
incorrect.
- Remove "Generic fallback" in keyboard_key() as it was non-functional,
you can't expect any useful output when mapping scan code directly to
Qt::Key. It was not working in 5.9 (did not check beyond that) and
no one has complained. It is safe to assume that the fallback code path
is dead and can be dropped. To use HW keyboard with wayland, you need
to build with libxkbcommon. We require this on XCB since Qt 5.1.0, so
it is not an unreasonable requirement for Wayland.
- Cleanup auto-repeat key handling.
- Cleanup "#if QT_CONFIG(xkbcommon)" checks.
Change-Id: Ie9fcc628621487fb58bc55dd595bf0d51eedfc92
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Diffstat (limited to 'src/client/qwaylandinputdevice_p.h')
-rw-r--r-- | src/client/qwaylandinputdevice_p.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h index 98e60286e..2dc3ddc27 100644 --- a/src/client/qwaylandinputdevice_p.h +++ b/src/client/qwaylandinputdevice_p.h @@ -211,18 +211,25 @@ public: uint32_t mNativeModifiers = 0; - int mRepeatKey; - uint32_t mRepeatCode; - uint32_t mRepeatTime; + struct repeatKey { + int key; + uint32_t code; + uint32_t time; + QString text; + Qt::KeyboardModifiers modifiers; + uint32_t nativeVirtualKey; + uint32_t nativeModifiers; + } mRepeatKey; + + QTimer mRepeatTimer; int mRepeatRate = 25; int mRepeatDelay = 400; - QString mRepeatText; - QTimer mRepeatTimer; + + uint32_t mKeymapFormat = WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1; Qt::KeyboardModifiers modifiers() const; private slots: - void repeatKey(); void handleFocusDestroyed(); void handleFocusLost(); @@ -230,12 +237,11 @@ private: #if QT_CONFIG(xkbcommon) bool createDefaultKeymap(); #endif - void sendKey(QWindow *tlw, ulong timestamp, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, - quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, - const QString& text = QString(), bool autorep = false, ushort count = 1); + void handleKey(ulong timestamp, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, + quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, + const QString &text, bool autorepeat = false, ushort count = 1); #if QT_CONFIG(xkbcommon) - xkb_keysym_t mRepeatSym = XKB_KEY_NoSymbol; QXkbCommon::ScopedXKBKeymap mXkbKeymap; QXkbCommon::ScopedXKBState mXkbState; #endif |