Revert "xcb: stablilize xkb state when keymap updated"
This reverts commit 27c25fc909c19ddc4750f36d26b7c500db9eb0ab. Currently Qt only supports core device of keyboard, not every real keyboard. Create a new xkb state during xcb_xkb_new_keyboard_notify_event_t, it will lose the correct state before the event, for example, when using the second or later layout than the first one. The new xkb state will use the first layout. It's difficult to sync the xkb states. Fixes: QTBUG-102493 Fixes: QTBUG-102640 Task-number: QTBUG-95933 Pick-to: 6.3 6.2 5.15 Change-Id: Iaa5369ff9f5495e194577dcbb8f78303158c9a73 Reviewed-by: Lu YaNing <luyaning@uniontech.com> Reviewed-by: Zhang Hao <543985125@qq.com> Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Ilya Fedin <fedin-ilja2010@ya.ru>
This commit is contained in:
parent
71684763b7
commit
9b92c5314e
@ -775,7 +775,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
|
||||
case XCB_XKB_NEW_KEYBOARD_NOTIFY: {
|
||||
xcb_xkb_new_keyboard_notify_event_t *ev = &xkb_event->new_keyboard_notify;
|
||||
if (ev->changed & XCB_XKB_NKN_DETAIL_KEYCODES)
|
||||
m_keyboard->updateKeymap(ev);
|
||||
m_keyboard->updateKeymap();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -365,17 +365,6 @@ void QXcbKeyboard::updateKeymap(xcb_mapping_notify_event_t *event)
|
||||
updateKeymap();
|
||||
}
|
||||
|
||||
void QXcbKeyboard::updateKeymap(xcb_xkb_new_keyboard_notify_event_t *event)
|
||||
{
|
||||
if (!event)
|
||||
return;
|
||||
|
||||
if (event->deviceID != event->oldDeviceID)
|
||||
m_config = false;
|
||||
|
||||
updateKeymap();
|
||||
}
|
||||
|
||||
void QXcbKeyboard::updateKeymap()
|
||||
{
|
||||
KeysymModifierMap keysymMods;
|
||||
@ -383,6 +372,8 @@ void QXcbKeyboard::updateKeymap()
|
||||
keysymMods = keysymsToModifiers();
|
||||
updateModifiers(keysymMods);
|
||||
|
||||
m_config = true;
|
||||
|
||||
if (!m_xkbContext) {
|
||||
m_xkbContext.reset(xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES));
|
||||
if (!m_xkbContext) {
|
||||
@ -398,13 +389,8 @@ void QXcbKeyboard::updateKeymap()
|
||||
if (connection()->hasXKB()) {
|
||||
m_xkbKeymap.reset(xkb_x11_keymap_new_from_device(m_xkbContext.get(), xcb_connection(),
|
||||
core_device_id, XKB_KEYMAP_COMPILE_NO_FLAGS));
|
||||
if (m_xkbKeymap) {
|
||||
if (m_config)
|
||||
m_xkbState.reset(xkb_state_new(m_xkbKeymap.get()));
|
||||
else
|
||||
m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), xcb_connection(), core_device_id));
|
||||
|
||||
}
|
||||
if (m_xkbKeymap)
|
||||
m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), xcb_connection(), core_device_id));
|
||||
} else {
|
||||
m_xkbKeymap.reset(keymapFromCore(keysymMods));
|
||||
if (m_xkbKeymap)
|
||||
@ -425,8 +411,6 @@ void QXcbKeyboard::updateKeymap()
|
||||
updateXKBMods();
|
||||
|
||||
QXkbCommon::verifyHasLatinLayout(m_xkbKeymap.get());
|
||||
|
||||
m_config = true;
|
||||
}
|
||||
|
||||
QList<int> QXcbKeyboard::possibleKeys(const QKeyEvent *event) const
|
||||
|
@ -69,7 +69,6 @@ public:
|
||||
|
||||
Qt::KeyboardModifiers translateModifiers(int s) const;
|
||||
void updateKeymap(xcb_mapping_notify_event_t *event);
|
||||
void updateKeymap(xcb_xkb_new_keyboard_notify_event_t *event);
|
||||
void updateKeymap();
|
||||
QList<int> possibleKeys(const QKeyEvent *event) const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user