mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-05 05:17:04 -08:00
Upstream commit 6e3d645d444073097e93520f047bb2321673119a KDE-bug: https://bugs.kde.org/show_bug.cgi?id=426684 Package-Manager: Portage-3.0.30, Repoman-3.0.3 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
51 lines
1.9 KiB
Diff
51 lines
1.9 KiB
Diff
From 6e3d645d444073097e93520f047bb2321673119a Mon Sep 17 00:00:00 2001
|
|
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
Date: Sun, 2 Jan 2022 23:52:07 +0100
|
|
Subject: [PATCH] Avoid XKeycodeToKeysym in KKeyServer::initializeMods
|
|
|
|
Xlib functions which work with keyboard mappings have a (Display) internal
|
|
cache, which needs to be refreshed on mapping changes by calling
|
|
X(kb)RefreshKeyboardMapping on change notify events.
|
|
|
|
After Qt switched to XCB, that is no longer happening, and it's also not
|
|
possible to get to the XEvent needed for triggering the refresh. Switch
|
|
over to using the XCB equivalent and just load the symbols on every invocation.
|
|
|
|
BUG: 426684
|
|
---
|
|
src/platforms/xcb/kkeyserver.cpp | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/platforms/xcb/kkeyserver.cpp b/src/platforms/xcb/kkeyserver.cpp
|
|
index 306c63b..bc43dbd 100644
|
|
--- a/src/platforms/xcb/kkeyserver.cpp
|
|
+++ b/src/platforms/xcb/kkeyserver.cpp
|
|
@@ -496,6 +496,7 @@ bool initializeMods()
|
|
}
|
|
|
|
checkDisplay();
|
|
+ xcb_key_symbols_t *symbols = xcb_key_symbols_alloc(QX11Info::connection());
|
|
XModifierKeymap *xmk = XGetModifierMapping(QX11Info::display());
|
|
|
|
int min_keycode;
|
|
@@ -515,7 +516,7 @@ bool initializeMods()
|
|
// found fixes the problem.
|
|
for (int j = 0; j < xmk->max_keypermod; ++j) {
|
|
for (int k = 0; k < keysyms_per_keycode; ++k) {
|
|
- keySymX = XKeycodeToKeysym(QX11Info::display(), xmk->modifiermap[xmk->max_keypermod * i + j], k);
|
|
+ keySymX = xcb_key_symbols_get_keysym(symbols, xmk->modifiermap[xmk->max_keypermod * i + j], k);
|
|
|
|
switch (keySymX) {
|
|
case XK_Alt_L:
|
|
@@ -628,6 +629,7 @@ bool initializeMods()
|
|
g_rgX11ModInfo[2].modX = g_alt_mask;
|
|
g_rgX11ModInfo[3].modX = g_meta_mask;
|
|
|
|
+ xcb_key_symbols_free(symbols);
|
|
XFreeModifiermap(xmk);
|
|
g_bInitializedMods = true;
|
|
|
|
--
|
|
GitLab
|
|
|