summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@qt.io>2019-02-10 14:22:59 +0100
committerJohan Helsing <johan.helsing@qt.io>2019-05-03 11:38:17 +0000
commit812ca6b0cf31ac424bb23a63a47a4771c9b71fc1 (patch)
tree6b427deaed510c009aae9aec9f83657e52d74089 /src
parent8b69d52db792c3910be53321df44b5c57baa694c (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.cpp11
-rw-r--r--src/client/qwaylandinputdevice_p.h3
-rw-r--r--src/client/qwaylandintegration.cpp7
-rw-r--r--src/client/qwaylandintegration_p.h2
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;