diff options
author | Ulrich Sibiller <uli42@gmx.de> | 2020-06-19 00:18:34 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2020-10-17 22:19:19 +0200 |
commit | ffc2c3840466ed50abc35cba40fdc697e478ebd6 (patch) | |
tree | 463e2477aabfb4fb5b1b87223d5d52d745ea2dd6 /nx-X11/programs/Xserver/hw/nxagent | |
parent | e74b99117727152904e994f37f1cc98b4ba54292 (diff) | |
download | nx-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
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent')
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 42 |
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__, |