remotekeyboard: Account for modifiers on Wayland
We were ignoring them, now we have a similar implementation to X11's.
This commit is contained in:
parent
b61ba29673
commit
c4a006984c
1 changed files with 36 additions and 11 deletions
|
@ -220,12 +220,27 @@ bool WaylandRemoteInput::handlePacket(const NetworkPacket &np)
|
||||||
s_session->iface->NotifyPointerButton(s_session->m_xdpPath, {}, BTN_LEFT, 0);
|
s_session->iface->NotifyPointerButton(s_session->m_xdpPath, {}, BTN_LEFT, 0);
|
||||||
} else if (isScroll) {
|
} else if (isScroll) {
|
||||||
s_session->iface->NotifyPointerAxis(s_session->m_xdpPath, {}, dx, dy);
|
s_session->iface->NotifyPointerAxis(s_session->m_xdpPath, {}, dx, dy);
|
||||||
} else if (specialKey) {
|
} else if (specialKey || !key.isEmpty()) {
|
||||||
|
bool ctrl = np.get<bool>(QStringLiteral("ctrl"), false);
|
||||||
|
bool alt = np.get<bool>(QStringLiteral("alt"), false);
|
||||||
|
bool shift = np.get<bool>(QStringLiteral("shift"), false);
|
||||||
|
bool super = np.get<bool>(QStringLiteral("super"), false);
|
||||||
|
|
||||||
|
if (ctrl)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTCTRL, 1);
|
||||||
|
if (alt)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTALT, 1);
|
||||||
|
if (shift)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTSHIFT, 1);
|
||||||
|
if (super)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTMETA, 1);
|
||||||
|
|
||||||
|
if (specialKey) {
|
||||||
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, SpecialKeysMap[specialKey], 1);
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, SpecialKeysMap[specialKey], 1);
|
||||||
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, SpecialKeysMap[specialKey], 0);
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, SpecialKeysMap[specialKey], 0);
|
||||||
} else if (!key.isEmpty()) {
|
} else if (!key.isEmpty()) {
|
||||||
for (const QChar character : key) {
|
for (const QChar character : key) {
|
||||||
const auto keysym = xkb_utf32_to_keysym(character.unicode());
|
const auto keysym = xkb_utf32_to_keysym(character.toLower().unicode());
|
||||||
if (keysym != XKB_KEY_NoSymbol) {
|
if (keysym != XKB_KEY_NoSymbol) {
|
||||||
s_session->iface->NotifyKeyboardKeysym(s_session->m_xdpPath, {}, keysym, 1).waitForFinished();
|
s_session->iface->NotifyKeyboardKeysym(s_session->m_xdpPath, {}, keysym, 1).waitForFinished();
|
||||||
s_session->iface->NotifyKeyboardKeysym(s_session->m_xdpPath, {}, keysym, 0).waitForFinished();
|
s_session->iface->NotifyKeyboardKeysym(s_session->m_xdpPath, {}, keysym, 0).waitForFinished();
|
||||||
|
@ -234,6 +249,16 @@ bool WaylandRemoteInput::handlePacket(const NetworkPacket &np)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctrl)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTCTRL, 0);
|
||||||
|
if (alt)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTALT, 0);
|
||||||
|
if (shift)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTSHIFT, 0);
|
||||||
|
if (super)
|
||||||
|
s_session->iface->NotifyKeyboardKeycode(s_session->m_xdpPath, {}, KEY_LEFTMETA, 0);
|
||||||
|
}
|
||||||
} else { // Is a mouse move event
|
} else { // Is a mouse move event
|
||||||
s_session->iface->NotifyPointerMotion(s_session->m_xdpPath, {}, dx, dy);
|
s_session->iface->NotifyPointerMotion(s_session->m_xdpPath, {}, dx, dy);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue