diff options
author | Gatis Paeglis <gatis.paeglis@qt.io> | 2019-02-10 14:22:59 +0100 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2019-05-03 11:38:17 +0000 |
commit | 812ca6b0cf31ac424bb23a63a47a4771c9b71fc1 (patch) | |
tree | 6b427deaed510c009aae9aec9f83657e52d74089 /src | |
parent | 8b69d52db792c3910be53321df44b5c57baa694c (diff) |
client: reimplement QPlatformIntegration::possibleKeys()
This is required to trigger more complex shortcut sequences. For
example, with 'us' keyboard layout to enter '%' or '+' you have to
press 'Shift' button. Previosly the following shortcuts could not be
triggered:
'Shift' + '5'
'%'
'Ctrl' + '+'
'Ctrl' + 'Shift' + '='
The same function also ensures that these shortcuts work with non-latin
keyboard layouts.
Change-Id: Id50c7bb28cf76b9f7a861ced7894b2cacae6ed65
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/client/qwaylandinputdevice.cpp | 11 | ||||
-rw-r--r-- | src/client/qwaylandinputdevice_p.h | 3 | ||||
-rw-r--r-- | src/client/qwaylandintegration.cpp | 7 | ||||
-rw-r--r-- | src/client/qwaylandintegration_p.h | 2 |
4 files changed, 23 insertions, 0 deletions
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp index 17c408a3d..39c02d962 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -476,6 +476,17 @@ QPointF QWaylandInputDevice::pointerSurfacePosition() const return mPointer ? mPointer->mSurfacePos : QPointF(); } +QList<int> QWaylandInputDevice::possibleKeys(const QKeyEvent *event) const +{ +#if QT_CONFIG(xkbcommon) + if (mKeyboard && mKeyboard->mXkbState) + return QXkbCommon::possibleKeys(mKeyboard->mXkbState.get(), event); +#else + Q_UNUSED(event); +#endif + return {}; +} + Qt::KeyboardModifiers QWaylandInputDevice::modifiers() const { if (!mKeyboard) diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h index 2dc3ddc27..39ca9dca5 100644 --- a/src/client/qwaylandinputdevice_p.h +++ b/src/client/qwaylandinputdevice_p.h @@ -124,6 +124,8 @@ public: QWaylandWindow *keyboardFocus() const; QWaylandWindow *touchFocus() const; + QList<int> possibleKeys(const QKeyEvent *event) const; + QPointF pointerSurfacePosition() const; Qt::KeyboardModifiers modifiers() const; @@ -245,6 +247,7 @@ private: QXkbCommon::ScopedXKBKeymap mXkbKeymap; QXkbCommon::ScopedXKBState mXkbState; #endif + friend class QWaylandInputDevice; }; class Q_WAYLAND_CLIENT_EXPORT QWaylandInputDevice::Pointer : public QObject, public QtWayland::wl_pointer diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp index 3a389d9ec..ea2b50b4a 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -293,6 +293,13 @@ QWaylandDisplay *QWaylandIntegration::display() const return mDisplay.data(); } +QList<int> QWaylandIntegration::possibleKeys(const QKeyEvent *event) const +{ + if (auto *seat = mDisplay->currentInputDevice()) + return seat->possibleKeys(event); + return {}; +} + QStringList QWaylandIntegration::themeNames() const { return GenericWaylandTheme::themeNames(); diff --git a/src/client/qwaylandintegration_p.h b/src/client/qwaylandintegration_p.h index 5e6f16d09..3aef2c4d9 100644 --- a/src/client/qwaylandintegration_p.h +++ b/src/client/qwaylandintegration_p.h @@ -106,6 +106,8 @@ public: QWaylandDisplay *display() const; + QList<int> possibleKeys(const QKeyEvent *event) const override; + QStringList themeNames() const override; QPlatformTheme *createPlatformTheme(const QString &name) const override; |