summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario Roessel <[email protected]>2023-03-01 11:37:57 +0100
committerQt Cherry-pick Bot <[email protected]>2023-04-20 08:04:40 +0000
commit2041157d77e91436220dcb81d94028acc2e39002 (patch)
tree383371b4176a38a74901e8be6ebc45300053a441
parent6c2355f45772a9f623fa24662b7c3781bdca88af (diff)
QXkbCommon: set Qt::KeypadModifier when keypad button is pressed
Task-number: QTBUG-111503 Done-With: Liang Qi <[email protected]> Change-Id: Ic7ca48ea8709d38aa83c95a9b5a7d39ff82f08c7 Reviewed-by: Eskil Abrahamsen Blomfeldt <[email protected]> (cherry picked from commit 298c9509129cf039a1da75d5682cbe273a341590) Reviewed-by: Qt Cherry-pick Bot <[email protected]>
-rw-r--r--src/gui/platform/unix/qxkbcommon.cpp5
-rw-r--r--src/gui/platform/unix/qxkbcommon_p.h2
-rw-r--r--src/platformsupport/input/libinput/qlibinputkeyboard.cpp2
3 files changed, 6 insertions, 3 deletions
diff --git a/src/gui/platform/unix/qxkbcommon.cpp b/src/gui/platform/unix/qxkbcommon.cpp
index fd368f8282d..5596b5903a5 100644
--- a/src/gui/platform/unix/qxkbcommon.cpp
+++ b/src/gui/platform/unix/qxkbcommon.cpp
@@ -564,7 +564,7 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
return qtKey;
}
-Qt::KeyboardModifiers QXkbCommon::modifiers(struct xkb_state *state)
+Qt::KeyboardModifiers QXkbCommon::modifiers(struct xkb_state *state, xkb_keysym_t keysym)
{
Qt::KeyboardModifiers modifiers = Qt::NoModifier;
@@ -577,6 +577,9 @@ Qt::KeyboardModifiers QXkbCommon::modifiers(struct xkb_state *state)
if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_LOGO, XKB_STATE_MODS_EFFECTIVE) > 0)
modifiers |= Qt::MetaModifier;
+ if (keysym >= XKB_KEY_KP_Space && keysym <= XKB_KEY_KP_9)
+ modifiers |= Qt::KeypadModifier;
+
return modifiers;
}
diff --git a/src/gui/platform/unix/qxkbcommon_p.h b/src/gui/platform/unix/qxkbcommon_p.h
index adc96b2ad45..096c6f46f05 100644
--- a/src/gui/platform/unix/qxkbcommon_p.h
+++ b/src/gui/platform/unix/qxkbcommon_p.h
@@ -51,7 +51,7 @@ public:
static void xkbcommon_XConvertCase(xkb_keysym_t sym, xkb_keysym_t *lower, xkb_keysym_t *upper);
static xkb_keysym_t qxkbcommon_xkb_keysym_to_upper(xkb_keysym_t ks);
- static Qt::KeyboardModifiers modifiers(struct xkb_state *state);
+ static Qt::KeyboardModifiers modifiers(struct xkb_state *state, xkb_keysym_t keysym = XKB_KEY_VoidSymbol);
static QList<int> possibleKeys(xkb_state *state, const QKeyEvent *event,
bool superAsMeta = false, bool hyperAsMeta = false);
diff --git a/src/platformsupport/input/libinput/qlibinputkeyboard.cpp b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
index f6640171eb8..25939cd5105 100644
--- a/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
+++ b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
@@ -79,7 +79,7 @@ void QLibInputKeyboard::processKey(libinput_event_keyboard *e)
xkb_state_update_key(m_state, keycode, pressed ? XKB_KEY_DOWN : XKB_KEY_UP);
- Qt::KeyboardModifiers modifiersAfterStateChange = QXkbCommon::modifiers(m_state);
+ Qt::KeyboardModifiers modifiersAfterStateChange = QXkbCommon::modifiers(m_state, sym);
QGuiApplicationPrivate::inputDeviceManager()->setKeyboardModifiers(modifiersAfterStateChange);
QWindowSystemInterface::handleExtendedKeyEvent(nullptr,