aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2020-06-19 00:18:34 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-10-17 22:19:19 +0200
commitffc2c3840466ed50abc35cba40fdc697e478ebd6 (patch)
tree463e2477aabfb4fb5b1b87223d5d52d745ea2dd6
parente74b99117727152904e994f37f1cc98b4ba54292 (diff)
downloadnx-libs-ffc2c3840466ed50abc35cba40fdc697e478ebd6.tar.gz
nx-libs-ffc2c3840466ed50abc35cba40fdc697e478ebd6.tar.bz2
nx-libs-ffc2c3840466ed50abc35cba40fdc697e478ebd6.zip
Keyboard.c: improve capslock and numlock handling
Fixes ArcticaProject/nx-libs#935
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index 48ab721f5..14d811877 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
@@ -713,6 +713,48 @@ XkbError:
}
#endif
+ #ifdef TEST
+ if (nxagentCapsLockKeycode != 0)
+ {
+ fprintf(stderr, "%s: Modifiers for CapsLock (%d): 0x%x\n", __func__, nxagentCapsLockKeycode, xkb->map->modmap[nxagentCapsLockKeycode]);
+ }
+ if (nxagentNumLockKeycode != 0)
+ {
+ fprintf(stderr, "%s: Modifiers for NumLock (%d): 0x%x\n", __func__, nxagentNumLockKeycode, xkb->map->modmap[nxagentNumLockKeycode]);
+ }
+ #endif
+
+ /* Users can add options to their xkb setup. E.g. setxkbmap
+ * -option caps:ctrl_modifier makes CapsLock behave like the
+ * Ctrl key. As we have special treatment for CapsLock and
+ * NumLock to keep them in sync with the real X server we
+ * check if they are assigned to another modifier. In that
+ * case we disable the sync treatment by setting the according
+ * keycode to 0.
+ */
+ if (xkb && xkb->map && xkb->map->modmap)
+ {
+ if (nxagentCapsLockKeycode != 0 && xkb->map->modmap[nxagentCapsLockKeycode] != LockMask)
+ {
+ nxagentCapsLockKeycode = 0;
+ #ifdef TEST
+ fprintf(stderr, "%s: CapsLock key is mapped to some other modifier - disabling special treatment\n", __func__);
+ #endif
+ }
+
+ /* I have not found an xkb option definition for remapping
+ * NumLock. But users can still do that manually so let's be
+ * safe here.
+ */
+ if (xkb->map->modmap[nxagentNumLockKeycode] != Mod2Mask)
+ {
+ nxagentNumLockKeycode = 0;
+ #ifdef TEST
+ fprintf(stderr, "%s: Numock key is mapped to some other modifier - disabling special treatment\n", __func__);
+ #endif
+ }
+ }
+
#ifdef DEBUG
fprintf(stderr, "%s: Going to set rules and init device: "
"[rules='%s',model='%s',layout='%s',variant='%s',options='%s'].\n", __func__,