diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-02 10:44:58 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-02 10:44:58 +0200 |
commit | a4d68e7d78a28225c23931431f0db6ebf75f5e41 (patch) | |
tree | ea04abea84bfa53aa4212cade81df780f4a5d89b /src/shared | |
parent | 5ce1c2a3bf9546171d2913c76330bc6d1b6a4789 (diff) | |
parent | 6260c4376e598031e467416027703bd11012621d (diff) | |
download | qtwayland-a4d68e7d78a28225c23931431f0db6ebf75f5e41.tar.gz |
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts:
.qmake.conf
examples/wayland/minimal-qml/main.qml
Change-Id: Ic34029a6aa77f2b359f40258a05421d82efd5b37
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/qwaylandxkb.cpp | 31 | ||||
-rw-r--r-- | src/shared/qwaylandxkb_p.h | 5 |
2 files changed, 16 insertions, 20 deletions
diff --git a/src/shared/qwaylandxkb.cpp b/src/shared/qwaylandxkb.cpp index 49925700..2afdcce8 100644 --- a/src/shared/qwaylandxkb.cpp +++ b/src/shared/qwaylandxkb.cpp @@ -293,8 +293,13 @@ static xkb_keysym_t toKeysymFromTable(uint32_t key) return 0; } -int QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers, const QString &text) +std::pair<int, QString> QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers) { + QString text; + uint utf32 = xkb_keysym_to_utf32(keysym); + if (utf32) + text = QString::fromUcs4(&utf32, 1); + int code = 0; if (keysym >= XKB_KEY_F1 && keysym <= XKB_KEY_F35) { @@ -316,7 +321,13 @@ int QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modif code = lookupKeysym(keysym); } - return code; + // Map control + letter to proper text + if (utf32 >= 'A' && utf32 <= '~' && (modifiers & Qt::ControlModifier)) { + utf32 &= ~0x60; + text = QString::fromUcs4(&utf32, 1); + } + + return { code, text }; } Qt::KeyboardModifiers QWaylandXkb::modifiers(struct xkb_state *state) @@ -342,22 +353,6 @@ QEvent::Type QWaylandXkb::toQtEventType(uint32_t state) return state != 0 ? QEvent::KeyPress : QEvent::KeyRelease; } -QString QWaylandXkb::textFromKeysym(uint32_t keysym, Qt::KeyboardModifiers modifiers) -{ - uint utf32 = xkb_keysym_to_utf32(keysym); - - // Map control + letter to proper text - if (utf32 >= 'A' && utf32 <= '~' && (modifiers & Qt::ControlModifier)) { - utf32 &= ~0x60; - return QString::fromUcs4(&utf32, 1); - } - - if (utf32) - return QString::fromUcs4(&utf32, 1); - - return QString(); -} - QVector<xkb_keysym_t> QWaylandXkb::toKeysym(QKeyEvent *event) { QVector<xkb_keysym_t> keysyms; diff --git a/src/shared/qwaylandxkb_p.h b/src/shared/qwaylandxkb_p.h index 9b5c935a..cdebf1b0 100644 --- a/src/shared/qwaylandxkb_p.h +++ b/src/shared/qwaylandxkb_p.h @@ -47,6 +47,8 @@ #include <QEvent> #include <xkbcommon/xkbcommon.h> +#include <utility> + QT_BEGIN_NAMESPACE class QKeyEvent; @@ -54,11 +56,10 @@ class QKeyEvent; class QWaylandXkb { public: - static int keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers, const QString &text); + static std::pair<int, QString> keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers); static Qt::KeyboardModifiers modifiers(struct xkb_state *state); static QEvent::Type toQtEventType(uint32_t state); - static QString textFromKeysym(uint32_t keysym, Qt::KeyboardModifiers modifiers); static QVector<xkb_keysym_t> toKeysym(QKeyEvent *event); }; |