diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-02-02 01:39:05 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-02-02 01:39:05 +0000 |
commit | fcc5224904648a8e6eb528d7603154160a20022f (patch) | |
tree | 3bfce096b38a9cea8eed13fc70c1526c456e9abd /kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch | |
parent | 2fd57282f0262ca084e05b0f2c63fbada395d02b (diff) |
gentoo resync : 02.02.2022
Diffstat (limited to 'kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch')
-rw-r--r-- | kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch b/kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch new file mode 100644 index 000000000000..a9f47883e6e8 --- /dev/null +++ b/kde-frameworks/kwindowsystem/files/kwindowsystem-5.90.0-avoid-XKeycodeToKeysym.patch @@ -0,0 +1,50 @@ +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 + |