Commit f5f4260b authored by Liang Qi's avatar Liang Qi Committed by Albert Astals Cid
Browse files

Revert "xcb: stablilize xkb state when keymap updated"

This reverts commit 27c25fc9

.

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's avatarLu YaNing <luyaning@uniontech.com>
Reviewed-by: zhang hao's avatarZhang Hao <543985125@qq.com>
Reviewed-by: default avatarLiang Qi <liang.qi@qt.io>
Reviewed-by: Ilya Fedin's avatarIlya Fedin <fedin-ilja2010@ya.ru>
(cherry picked from commit 9b92c531)
parent 5bc6d26a
......@@ -752,7 +752,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;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment