From c37c47ac496ec3335845ce9575c82b1fb28a831e Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Wed, 6 Dec 2017 00:04:29 +0100 Subject: Keyboard.c: Improve TEST output --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 51f57a897..c4a45ceca 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -556,11 +556,17 @@ static char *nxagentXkbGetRules() strcpy(path, XkbBaseDirectory); strcat(path, "/rules/"); strcat(path, XKB_DFLT_RULES_FILE); + #ifdef TEST + fprintf(stderr, "nxagentXkbGetRules: checking rules file [%s]\n", path); + #endif ret = stat(path, &buf); if (ret == 0) { free(path); + #ifdef TEST + fprintf(stderr, "nxagentXkbGetRules: returning default rules file [%s]\n", XKB_DFLT_RULES_FILE); + #endif return XKB_DFLT_RULES_FILE; } @@ -571,11 +577,17 @@ static char *nxagentXkbGetRules() strcpy(path, XkbBaseDirectory); strcat(path, "/rules/"); strcat(path, XKB_ALTS_RULES_FILE); + #ifdef TEST + fprintf(stderr, "nxagentXkbGetRules: checking rules file [%s]\n", path); + #endif ret = stat(path, &buf); if (ret == 0) { free(path); + #ifdef TEST + fprintf(stderr, "nxagentXkbGetRules: returning alternative rules file [%s]\n", XKB_ALTS_RULES_FILE); + #endif return XKB_ALTS_RULES_FILE; } @@ -584,6 +596,9 @@ static char *nxagentXkbGetRules() #endif free(path); + #ifdef TEST + fprintf(stderr, "nxagentXkbGetRules: returning default rules file [%s]\n", XKB_DFLT_RULES_FILE); + #endif return XKB_DFLT_RULES_FILE; } @@ -951,7 +966,7 @@ XkbError: options = XKB_DFLT_KB_OPTIONS; #ifdef TEST - fprintf(stderr, "nxagentKeyboardProc: XkbInitialMap [%s]\n", XkbInitialMap ? XkbInitialMap : "NULL"); + fprintf(stderr, "nxagentKeyboardProc: XkbInitialMap (option -xkbmap) is [%s]\n", XkbInitialMap ? XkbInitialMap : "NULL"); #endif if (XkbInitialMap) { -- cgit v1.2.3 From 9566acb5a4b3e8b91aec74bc890f078a78cedbc2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Wed, 6 Dec 2017 00:04:44 +0100 Subject: Keyboard.c: print message class for user messages --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index c4a45ceca..9b9f33666 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1894,23 +1894,23 @@ void nxagentKeycodeConversionSetup(void) if (doptions != NULL) fprintf(keyboard_file, "options=\"%s\"\n", doptions[0] == '\0' ? "," : doptions); fclose(keyboard_file); - fprintf(stderr, "keyboard file created\n"); + fprintf(stderr, "Info: keyboard file created\n"); } else { int save_err = errno; - fprintf(stderr, "keyboard file not created: %s\n", strerror(save_err)); + fprintf(stderr, "Error: keyboard file not created: %s\n", strerror(save_err)); } free(keyboard_file_path); } else { - fprintf(stderr, "SessionPath not defined\n"); + fprintf(stderr, "Warning: SessionPath not defined\n"); } } else { - fprintf(stderr, "Failed to create the keyboard file\n"); + fprintf(stderr, "Warning: Failed to create the keyboard file\n"); } if (drules != NULL && dmodel != NULL && -- cgit v1.2.3 From ba8076697d825c8f3e0388967a11a7d691a4b61c Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 14:40:53 +0200 Subject: Keyboard.c: Add some comments with changelog explanations This helps understanding the intention of the following code. --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 9b9f33666..aa36c0a83 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -909,6 +909,17 @@ XkbError: rules = nxagentXkbGetRules(); + /* + from nxagent changelog: + 2.0.22: + - Implemented handling of value "query" for nxagentKbtype. This value + is passed by the NX client for MacOSX. If value of nxagentKbtype is + "query" or NULL we init keyboard by core protocol functions reading + the keyboard mapping of the X server. The property _XKB_RULES_NAMES + is always set on the root window with default values of model and + layout. + */ + if ((nxagentKeyboard != NULL) && (strcmp(nxagentKeyboard, "query") != 0)) { for (i = 0; nxagentKeyboard[i] != '/' && nxagentKeyboard[i] != 0; i++); @@ -1721,6 +1732,16 @@ void nxagentEnableXkbExtension(void) } } +/* + from nxagent-3.0.0-88 changelog: + + - Fixed TR10D01539. Some XKEYBOARD requests are disabled if the option + 'keyboard' has value 'query'. This locks the initial keyboard map. + Enabling/disabling of XKEYBOARD requests is done at run time. + + - Added -noxkblock command line option enabling the XKEYBOARD requests + even if the option 'keyboard' value is 'query'. +*/ void nxagentTuneXkbWrapper(void) { if (nxagentOption(InhibitXkb) == 0) -- cgit v1.2.3 From a4473785553a06f35b005683c7d50c1ef7561b13 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 14:44:46 +0200 Subject: nxagent manpage: Improve explanation of -noignore and -noxkblock Fixes ArcticaProject/nx-libs#257 --- nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 index f28c1616f..8167c9629 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 +++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 @@ -421,13 +421,19 @@ disable use of shared pixmaps enable use of shared pixmaps .TP 8 .B \-noignore -don't ignore pointer and keyboard configuration changes mandated by clients +don't ignore pointer and keyboard configuration changes mandated by +clients. As a result, configuration commands like disabling the +keyboard bell (xset -b) will also affect the real X server. .TP 8 .B \-nokbreset don't reset keyboard device if the session is resumed .TP 8 .B \-noxkblock -always allow applications to change layout through XKEYBOARD +this is only relevant if you also specify \-keyboard=query. In that +case \fBnxagent\fR will lock the keyboard settings and clients will +get an error when trying to change keyboard settings via +XKEYBOARD. With \-noxkblock the lock is not applied and clients can +change the keyboard settings through XKEYBOARD. .TP 8 .B \-tile WxH size of image tiles (minimum allowed: 32x32) -- cgit v1.2.3 From 1e1ea1ceae43cba0744f1c277d2fe7a6a547cf70 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 15:25:53 +0200 Subject: Keyboard.c: Some code cleanups --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 103 ++++++++++++-------------- 1 file changed, 46 insertions(+), 57 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index aa36c0a83..565153f84 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -647,11 +647,10 @@ void nxagentChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl *ctrl) * devices attached to the real X server. */ - if (nxagentOption(DeviceControl) == True) + if (nxagentOption(DeviceControl)) { unsigned long value_mask; XKeyboardControl values; - int i; #ifdef TEST fprintf(stderr, "nxagentChangeKeyboardControl: WARNING! Propagating changes to keyboard settings.\n"); @@ -686,7 +685,7 @@ void nxagentChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl *ctrl) value_mask = KBLed | KBLedMode; - for (i = 1; i <= 32; i++) + for (int i = 1; i <= 32; i++) { values.led = i; values.led_mode = (ctrl->leds & (1 << (i - 1))) ? LedModeOn : LedModeOff; @@ -888,7 +887,7 @@ XkbError: #endif #ifdef XKB - } else { + } else { /* if (noXkbExtension) */ FILE *file; XkbConfigRtrnRec config; @@ -920,7 +919,7 @@ XkbError: layout. */ - if ((nxagentKeyboard != NULL) && (strcmp(nxagentKeyboard, "query") != 0)) + if (nxagentKeyboard && (strcmp(nxagentKeyboard, "query") != 0)) { for (i = 0; nxagentKeyboard[i] != '/' && nxagentKeyboard[i] != 0; i++); @@ -1046,7 +1045,7 @@ XkbError: else nxagentXkbConfigFilePath = strdup(XKB_CONFIG_FILE_NX); - if (nxagentXkbConfigFilePath == NULL) + if (!nxagentXkbConfigFilePath) { FatalError("nxagentKeyboardProc: malloc failed."); } @@ -1056,7 +1055,7 @@ XkbError: nxagentXkbConfigFilePath); #endif - if ((file = fopen(nxagentXkbConfigFilePath, "r")) != NULL) { + if ((file = fopen(nxagentXkbConfigFilePath, "r"))) { #ifdef TEST fprintf(stderr, "nxagentKeyboardProc: Going to parse config file.\n"); @@ -1129,8 +1128,8 @@ XkbError: #endif #ifdef DEBUG fprintf(stderr, "nxagentKeyboardProc: Going to set rules and init device: " - "[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].\n", - rules, model, layout, variants, options); + "[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].\n", + rules, model, layout, variants, options); #endif XkbSetRulesDflts(rules, model, layout, variants, options); @@ -1338,17 +1337,15 @@ int nxagentResetKeyboard(void) savedBellPercent, savedBellPitch, savedBellDuration); #endif - devBackup = malloc(sizeof(DeviceIntRec)); - - if (devBackup == NULL) + if (devBackup = malloc(sizeof(DeviceIntRec))) { - #ifdef PANIC - fprintf(stderr, "nxagentSaveKeyboardDeviceData: PANIC! Can't allocate backup structure.\n"); - #endif + memset(devBackup, 0, sizeof(DeviceIntRec)); } else { - memset(devBackup, 0, sizeof(DeviceIntRec)); + #ifdef PANIC + fprintf(stderr, "nxagentResetKeyboard: PANIC! Can't allocate backup structure.\n"); + #endif } nxagentSaveKeyboardDeviceData(dev, devBackup); @@ -1449,7 +1446,6 @@ void nxagentCheckModifierMasks(CARD8 keycode, int j) void nxagentCheckRemoteKeycodes() { nxagentCapsLockKeycode = XKeysymToKeycode(nxagentDisplay, XK_Caps_Lock); - nxagentNumLockKeycode = XKeysymToKeycode(nxagentDisplay, XK_Num_Lock); #ifdef DEBUG @@ -1461,7 +1457,7 @@ void nxagentCheckRemoteKeycodes() static int nxagentSaveKeyboardDeviceData(DeviceIntPtr dev, DeviceIntPtr devBackup) { - if (devBackup == NULL) + if (!devBackup) { #ifdef PANIC fprintf(stderr, "nxagentSaveKeyboardDeviceData: PANIC! Pointer to backup structure is null.\n"); @@ -1470,10 +1466,8 @@ static int nxagentSaveKeyboardDeviceData(DeviceIntPtr dev, DeviceIntPtr devBacku return -1; } - devBackup -> key = dev -> key; - - devBackup -> focus = dev -> focus; - + devBackup -> key = dev -> key; + devBackup -> focus = dev -> focus; devBackup -> kbdfeed = dev -> kbdfeed; #ifdef DEBUG @@ -1485,7 +1479,7 @@ static int nxagentSaveKeyboardDeviceData(DeviceIntPtr dev, DeviceIntPtr devBacku static int nxagentRestoreKeyboardDeviceData(DeviceIntPtr devBackup, DeviceIntPtr dev) { - if (devBackup == NULL) + if (!devBackup) { #ifdef PANIC fprintf(stderr, "nxagentRestoreKeyboardDeviceData: PANIC! Pointer to backup structure is null.\n"); @@ -1494,10 +1488,8 @@ static int nxagentRestoreKeyboardDeviceData(DeviceIntPtr devBackup, DeviceIntPtr return -1; } - dev -> key = devBackup -> key; - - dev -> focus = devBackup -> focus; - + dev -> key = devBackup -> key; + dev -> focus = devBackup -> focus; dev -> kbdfeed = devBackup -> kbdfeed; #ifdef DEBUG @@ -1512,7 +1504,7 @@ static int nxagentFreeKeyboardDeviceData(DeviceIntPtr dev) { KbdFeedbackPtr k, knext; - if (dev == NULL) + if (!dev) { #ifdef PANIC fprintf(stderr, "nxagentFreeKeyboardDeviceData: PANIC! Pointer to device structure is null.\n"); @@ -1535,14 +1527,14 @@ static int nxagentFreeKeyboardDeviceData(DeviceIntPtr dev) free(dev->key->modifierKeyMap); free(dev->key); - dev->key=NULL; + dev->key = NULL; } if (dev->focus) { free(dev->focus->trace); free(dev->focus); - dev->focus=NULL; + dev->focus = NULL; } for (k = dev->kbdfeed; k; k = knext) @@ -1624,7 +1616,7 @@ void nxagentInitXkbWrapper(void) fprintf(stderr, "nxagentInitXkbWrapper: Called.\n"); #endif - if (nxagentOption(InhibitXkb) == 0) + if (!nxagentOption(InhibitXkb)) { #ifdef TEST fprintf(stderr, "nxagentInitXkbWrapper: Nothing to do.\n"); @@ -1635,9 +1627,7 @@ void nxagentInitXkbWrapper(void) memset(&nxagentXkbWrapper, 0, sizeof(XkbWrapperRec)); - extension = CheckExtension("XKEYBOARD"); - - if (extension != NULL) + if ((extension = CheckExtension("XKEYBOARD"))) { nxagentXkbWrapper.base = extension -> base; nxagentXkbWrapper.eventBase = extension -> eventBase; @@ -1668,9 +1658,9 @@ void nxagentDisableXkbExtension(void) if (nxagentXkbWrapper.base > 0) { - if (nxagentXkbWrapper.ProcXkbDispatchBackup == NULL) + if (!nxagentXkbWrapper.ProcXkbDispatchBackup) { - nxagentXkbWrapper.ProcXkbDispatchBackup = ProcVector[nxagentXkbWrapper.base]; + nxagentXkbWrapper.ProcXkbDispatchBackup = ProcVector[nxagentXkbWrapper.base]; ProcVector[nxagentXkbWrapper.base] = ProcXkbInhibited; } @@ -1681,7 +1671,7 @@ void nxagentDisableXkbExtension(void) } #endif - if (nxagentXkbWrapper.SProcXkbDispatchBackup == NULL) + if (!nxagentXkbWrapper.SProcXkbDispatchBackup) { nxagentXkbWrapper.SProcXkbDispatchBackup = SwappedProcVector[nxagentXkbWrapper.base]; @@ -1704,7 +1694,7 @@ void nxagentEnableXkbExtension(void) if (nxagentXkbWrapper.base > 0) { - if (nxagentXkbWrapper.ProcXkbDispatchBackup != NULL) + if (nxagentXkbWrapper.ProcXkbDispatchBackup) { ProcVector[nxagentXkbWrapper.base] = nxagentXkbWrapper.ProcXkbDispatchBackup; @@ -1717,7 +1707,7 @@ void nxagentEnableXkbExtension(void) } #endif - if (nxagentXkbWrapper.SProcXkbDispatchBackup != NULL) + if (nxagentXkbWrapper.SProcXkbDispatchBackup) { SwappedProcVector[nxagentXkbWrapper.base] = nxagentXkbWrapper.SProcXkbDispatchBackup; @@ -1744,7 +1734,7 @@ void nxagentEnableXkbExtension(void) */ void nxagentTuneXkbWrapper(void) { - if (nxagentOption(InhibitXkb) == 0) + if (!nxagentOption(InhibitXkb)) { #ifdef TEST fprintf(stderr, "nxagentTuneXkbWrapper: Nothing to do.\n"); @@ -1753,8 +1743,7 @@ void nxagentTuneXkbWrapper(void) return; } - if (nxagentKeyboard != NULL && - strcmp(nxagentKeyboard, "query") == 0) + if (nxagentKeyboard && strcmp(nxagentKeyboard, "query") == 0) { nxagentDisableXkbExtension(); } @@ -1799,14 +1788,14 @@ static int nxagentXkbGetNames(char **rules, char **model, char **layout, atom, 0, 256, 0, XA_STRING, &type, &format, &n, &after, (unsigned char **)&data); - if (result !=Success || data == NULL) + if (result != Success || !data) { return 0; } if ((after > 0) || (type != XA_STRING) || (format != 8)) { - if (data != NULL) + if (data) { XFree(data); return 0; @@ -1817,7 +1806,7 @@ static int nxagentXkbGetNames(char **rules, char **model, char **layout, if (name < data + n) { - *rules = name; + *rules = name; name += strlen(name) + 1; } @@ -1876,7 +1865,7 @@ void nxagentKeycodeConversionSetup(void) &dvariant, &doptions); #ifdef DEBUG - if (drulesLen != 0 && drules != NULL && dmodel != NULL) + if (drulesLen != 0 && drules && dmodel) { fprintf(stderr, "nxagentKeycodeConversionSetup: " "Remote: [rules='%s',model='%s',layout='%s',variant='%s',options='%s'].\n", @@ -1892,27 +1881,27 @@ void nxagentKeycodeConversionSetup(void) if (drulesLen != 0) { char *sessionpath = nxagentGetSessionPath(); - if (sessionpath != NULL) + if (sessionpath) { int keyboard_file_path_size = strlen(sessionpath) + strlen("/keyboard"); char *keyboard_file_path = malloc((keyboard_file_path_size + 1) * sizeof(char)); FILE *keyboard_file; - if (keyboard_file_path == NULL) + if (!keyboard_file_path) { FatalError("nxagentKeycodeConversionSetup: malloc failed."); } strcpy(keyboard_file_path, sessionpath); strcat(keyboard_file_path, "/keyboard"); - if ((keyboard_file = fopen(keyboard_file_path, "w")) != NULL) { - if (drules != NULL) + if ((keyboard_file = fopen(keyboard_file_path, "w"))) { + if (drules) fprintf(keyboard_file, "rules=\"%s\"\n", drules[0] == '\0' ? "," : drules); - if (dmodel != NULL) + if (dmodel) fprintf(keyboard_file, "model=\"%s\"\n", dmodel[0] == '\0' ? "," : dmodel); - if (dlayout != NULL) + if (dlayout) fprintf(keyboard_file, "layout=\"%s\"\n", dlayout[0] == '\0' ? "," : dlayout); - if (dvariant != NULL) + if (dvariant) fprintf(keyboard_file, "variant=\"%s\"\n", dvariant[0] == '\0' ? "," : dvariant); - if (doptions != NULL) + if (doptions) fprintf(keyboard_file, "options=\"%s\"\n", doptions[0] == '\0' ? "," : doptions); fclose(keyboard_file); fprintf(stderr, "Info: keyboard file created\n"); @@ -1934,7 +1923,7 @@ void nxagentKeycodeConversionSetup(void) fprintf(stderr, "Warning: Failed to create the keyboard file\n"); } - if (drules != NULL && dmodel != NULL && + if (drules && dmodel && (strcmp(drules, "evdev") == 0 || strcmp(dmodel, "evdev") == 0)) { @@ -1951,7 +1940,7 @@ void nxagentKeycodeConversionSetup(void) fprintf(stderr, "Info: Keycode conversion auto-determined as off\n"); } - if (drules != NULL) + if (drules) { XFree(drules); } @@ -1981,4 +1970,4 @@ void nxagentResetKeycodeConversion(void) } } -#endif +#endif /* XKB */ -- cgit v1.2.3 From 8b206a261c97817adf951a272035c2202f440765 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 15:26:11 +0200 Subject: Keyboard.c: Make xkblock more robust If xorg upstream xkb gets extended one day the previous code would not block new xkb calls even if they would change keyboard settings. So only act on the currently known calls and throw an error for all unknown calls. --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 565153f84..22cf1b44d 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1600,11 +1600,31 @@ int ProcXkbInhibited(register ClientPtr client) { return BadAccess; } - default: + case X_kbBell: + case X_kbGetCompatMap: + case X_kbGetControls: + case X_kbGetDeviceInfo: + case X_kbGetGeometry: + case X_kbGetIndicatorMap: + case X_kbGetIndicatorState: + case X_kbGetMap: + case X_kbGetNamedIndicator: + case X_kbGetNames: + case X_kbGetState: + case X_kbListComponents: + case X_kbPerClientFlags: + case X_kbSelectEvents: + case X_kbSetDeviceInfo: + case X_kbUseExtension: { return (client->swapped ? nxagentXkbWrapper.SProcXkbDispatchBackup(client) : nxagentXkbWrapper.ProcXkbDispatchBackup(client)); } + default: + { + /* Just make sure that it works in case xkb gets extended in future */ + return BadImplementation; + } } } -- cgit v1.2.3 From 5c4a001acdd67fc2c87af2b0233a8c03dd303a55 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 15:28:59 +0200 Subject: nxagent manpage: Extend keyboard documentation --- nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 | 28 +++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 index 8167c9629..20838bdb8 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 +++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 @@ -500,8 +500,29 @@ set resizing support (default: true) .B fullscreen= start or resume a session in fullscreen mode (default: off) .TP 8 -.B keyboard= -set remote keyboard layout +.B keyboard= or kbtype= + +.BR query | / + +.RS 8 +.TP 8 +.I query +use the default XKB keyboard layout (see below) and only allow clients +to query the settings but prevent any changes. \fIquery\fR is +especially helpful for setups where you need to set/modify the actual +keyboard layout using core X protocol functions (e.g. via \fBxmodmap\fR). It is used for +MacOS X clients to handle some keyboard problems that are special for +this platform. Note that in this case XKEYBOARD will always report +the default layout which will most likely not match the experienced +settings. +.TP 8 +.I / +use the given model and layout. You can not modify keyboard rules, +variants or options. +.TP 8 +If \fIkeyboard\fR is omitted the internal defaults of \fBnxagent\fR +will used (rules: xfree86, layout: us, model: pc102). +.RE .TP 8 .B keyconv= set keycode conversion mode @@ -542,9 +563,6 @@ enable using shared memory .B shpix= enable shared pixmaps support .TP 8 -.B kbtype= -set remote keyboard type -.TP 8 .B client= type of connecting operating system (supported: \fIlinux\fR, \fIwindows\fR, \fIsolaris\fR and \fImacosx\fR) -- cgit v1.2.3 From eb4abe4c55b2ff55c0a252f6f87f28d16be144d0 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 15:58:08 +0200 Subject: Keyboard.c: Use calloc instead of malloc + memset --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 22cf1b44d..1d3c94189 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1337,11 +1337,7 @@ int nxagentResetKeyboard(void) savedBellPercent, savedBellPitch, savedBellDuration); #endif - if (devBackup = malloc(sizeof(DeviceIntRec))) - { - memset(devBackup, 0, sizeof(DeviceIntRec)); - } - else + if (!(devBackup = calloc(1, sizeof(DeviceIntRec)))) { #ifdef PANIC fprintf(stderr, "nxagentResetKeyboard: PANIC! Can't allocate backup structure.\n"); -- cgit v1.2.3 From 94fae7497c8499b5106d6ccaa85ad11c8e4f95d6 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 16:41:09 +0200 Subject: Keyboard.c: XkbDfltRepeatDelay and XkbDfltRepeatIntervall are int not uint --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 1d3c94189..1cb5cc9d7 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -754,7 +754,7 @@ N/A XkbDfltRepeatInterval = ~ 0; #ifdef TEST - fprintf(stderr, "nxagentKeyboardProc: Set repeat delay to [%u] interval to [%u].\n", + fprintf(stderr, "nxagentKeyboardProc: Set repeat delay to [%d] interval to [%d].\n", XkbDfltRepeatDelay, XkbDfltRepeatInterval); #endif -- cgit v1.2.3 From 88bc52615cdc3d348d1d6565e9ea40b23c226b29 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 12 Aug 2017 17:38:35 +0200 Subject: Keyboard.c: set variables to NULL after free --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 1cb5cc9d7..951c30cc8 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1065,6 +1065,7 @@ XkbError: ErrorF("Error parsing config file.\n"); free(nxagentXkbConfigFilePath); + nxagentXkbConfigFilePath = NULL; fclose(file); goto XkbError; @@ -1095,6 +1096,7 @@ XkbError: options = config.options; free(nxagentXkbConfigFilePath); + nxagentXkbConfigFilePath = NULL; fclose(file); } @@ -1114,6 +1116,7 @@ XkbError: nxagentBell, nxagentChangeKeyboardControl); free(nxagentXkbConfigFilePath); + nxagentXkbConfigFilePath = NULL; if (!nxagentKeyboard || strcmp(nxagentKeyboard, "query") == 0) { -- cgit v1.2.3 From de9b4edf94062e5cc58161fd3b8d28fe9cd115c2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 19:09:10 +0200 Subject: Keyboard.c: Fix indentation --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 951c30cc8..e55dbfbce 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -869,22 +869,22 @@ XkbError: free(layout); } #endif - XGetKeyboardControl(nxagentDisplay, &values); + XGetKeyboardControl(nxagentDisplay, &values); - memmove((char *) defaultKeyboardControl.autoRepeats, - (char *) values.auto_repeats, sizeof(values.auto_repeats)); + memmove((char *) defaultKeyboardControl.autoRepeats, + (char *) values.auto_repeats, sizeof(values.auto_repeats)); - #ifdef TEST - { - int ret = - #endif - InitKeyboardDeviceStruct((DevicePtr) pDev, &keySyms, modmap, - nxagentBell, nxagentChangeKeyboardControl); + #ifdef TEST + { + int ret = + #endif + InitKeyboardDeviceStruct((DevicePtr) pDev, &keySyms, modmap, + nxagentBell, nxagentChangeKeyboardControl); - #ifdef TEST - fprintf(stderr, "nxagentKeyboardProc: InitKeyboardDeviceStruct returns [%d].\n", ret); - } - #endif + #ifdef TEST + fprintf(stderr, "nxagentKeyboardProc: InitKeyboardDeviceStruct returns [%d].\n", ret); + } + #endif #ifdef XKB } else { /* if (noXkbExtension) */ -- cgit v1.2.3 From 8e5b1e7a261f8861fac1268d8c7c97af96f52bbe Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 22 Jul 2017 22:12:51 +0200 Subject: Keyboard.c: Replace some memsets by zero initialization --- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index e55dbfbce..8ae64ee00 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -893,7 +893,7 @@ XkbError: char *nxagentXkbConfigFilePath; - XkbComponentNamesRec names; + XkbComponentNamesRec names = {0}; char *rules, *variants, *options; #ifdef TEST @@ -904,7 +904,6 @@ XkbError: fprintf(stderr, "nxagentKeyboardProc: nxagentKeyboard is [%s].\n", nxagentKeyboard ? nxagentKeyboard : "NULL"); #endif - memset(&names, 0, sizeof(XkbComponentNamesRec)); rules = nxagentXkbGetRules(); @@ -1257,11 +1256,10 @@ void nxagentNotifyKeyboardChanges(int oldMinKeycode, int oldMaxKeycode) if (!noXkbExtension) { DeviceIntPtr dev; - xkbNewKeyboardNotify nkn; + xkbNewKeyboardNotify nkn = {0}; dev = inputInfo.keyboard; - memset(&nkn, 0, sizeof(xkbNewKeyboardNotify)); nkn.deviceID = nkn.oldDeviceID = dev -> id; nkn.minKeyCode = 8; nkn.maxKeyCode = 255; @@ -1279,9 +1277,8 @@ void nxagentNotifyKeyboardChanges(int oldMinKeycode, int oldMaxKeycode) #endif int i; - xEvent event; + xEvent event = {0}; - memset(&event, 0, sizeof(xEvent)); event.u.u.type = MappingNotify; event.u.mappingNotify.request = MappingKeyboard; event.u.mappingNotify.firstKeyCode = inputInfo.keyboard -> key -> curKeySyms.minKeyCode; -- cgit v1.2.3 From 7dbc6cf86e159506b8e3e5d27ed032908bab92e3 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 31 Aug 2017 16:17:29 +0200 Subject: Events.c/h: Rename & restructure some Xkb functions nxagentInitKeyboardState -> nxagentInitXkbKeyboardState nxagentHandleKeyboardEvent -> nxagentHandleXkbKeyboardStateEvent --- nx-X11/programs/Xserver/hw/nxagent/Events.c | 40 ++++++++++++++--------------- nx-X11/programs/Xserver/hw/nxagent/Events.h | 4 +-- 2 files changed, 22 insertions(+), 22 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c index d1fdfd21e..61d39ee98 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c @@ -1168,7 +1168,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was nxagentXkbNumTrap = 1; } - nxagentInitKeyboardState(); + nxagentInitXkbKeyboardState(); nxagentXkbCapsTrap = 0; nxagentXkbNumTrap = 0; @@ -2079,7 +2079,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was * state modification event. */ - if (nxagentHandleKeyboardEvent(&X) == 0 && nxagentHandleXFixesSelectionNotify(&X) == 0) + if (nxagentHandleXkbKeyboardStateEvent(&X) == 0 && nxagentHandleXFixesSelectionNotify(&X) == 0) { #ifdef TEST fprintf(stderr, "nxagentDispatchEvents: WARNING! Unhandled event code [%d].\n", @@ -2318,7 +2318,7 @@ int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult *result) nxagentXkbNumTrap = 1; } - nxagentInitKeyboardState(); + nxagentInitXkbKeyboardState(); nxagentXkbCapsTrap = 0; nxagentXkbNumTrap = 0; @@ -2785,22 +2785,22 @@ int nxagentHandleClientMessageEvent(XEvent *X, enum HandleEventResult *result) return 1; } -int nxagentHandleKeyboardEvent(XEvent *X) +int nxagentHandleXkbKeyboardStateEvent(XEvent *X) { XkbEvent *xkbev = (XkbEvent *) X; - #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Handling event with caps [%d] num [%d] locked [%d].\n", - nxagentXkbState.Caps, nxagentXkbState.Num, nxagentXkbState.Locked); - #endif - if (xkbev -> type == nxagentXkbInfo.EventBase + XkbEventCode && xkbev -> any.xkb_type == XkbStateNotify) { + #ifdef TEST + fprintf(stderr, "%s: Handling event with caps [%d] num [%d] locked [%d].\n", __func__, + nxagentXkbState.Caps, nxagentXkbState.Num, nxagentXkbState.Locked); + #endif + nxagentXkbState.Locked = xkbev -> state.locked_mods; #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Updated XKB locked modifier bits to [%x].\n", + fprintf(stderr, "%s: Updated XKB locked modifier bits to [%x].\n", __func__, nxagentXkbState.Locked); #endif @@ -2812,7 +2812,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) nxagentXkbState.Caps = 1; #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [66] to engage capslock.\n"); + fprintf(stderr, "%s: Sending fake key [66] to engage capslock.\n", __func__); #endif if (!nxagentXkbCapsTrap) @@ -2827,7 +2827,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) nxagentXkbState.Caps = 0; #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [66] to release capslock.\n"); + fprintf(stderr, "%s: Sending fake key [66] to release capslock.\n", __func__); #endif nxagentSendFakeKey(66); @@ -2839,7 +2839,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) { #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [66] to release capslock.\n"); + fprintf(stderr, "%s: Sending fake key [66] to release capslock.\n", __func__); #endif nxagentSendFakeKey(66); @@ -2851,7 +2851,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) nxagentXkbState.Num = 1; #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [77] to engage numlock.\n"); + fprintf(stderr, "%s: Sending fake key [77] to engage numlock.\n", __func__); #endif if (!nxagentXkbNumTrap) @@ -2866,7 +2866,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) nxagentXkbState.Num = 0; #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [77] to release numlock.\n"); + fprintf(stderr, "%s: Sending fake key [77] to release numlock.\n", __func__); #endif nxagentSendFakeKey(77); @@ -2878,7 +2878,7 @@ int nxagentHandleKeyboardEvent(XEvent *X) { #ifdef TEST - fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [77] to release numlock.\n"); + fprintf(stderr, "%s: Sending fake key [77] to release numlock.\n", __func__); #endif nxagentSendFakeKey(77); @@ -3792,7 +3792,7 @@ void nxagentSendFakeKey(int key) mieqEnqueue(&fake); } -int nxagentInitKeyboardState() +int nxagentInitXkbKeyboardState() { XEvent X; @@ -3801,7 +3801,7 @@ int nxagentInitKeyboardState() XkbEvent *xkbev = (XkbEvent *) &X; #ifdef TEST - fprintf(stderr, "nxagentInitKeyboardState: Initializing XKB state.\n"); + fprintf(stderr, "%s: Initializing XKB state.\n", __func__); #endif memset(&X, 0, sizeof(XEvent)); @@ -3821,14 +3821,14 @@ int nxagentInitKeyboardState() } #ifdef TEST - fprintf(stderr, "nxagentInitKeyboardState: Assuming XKB locked modifier bits [%x].\n", + fprintf(stderr, "%s: Assuming XKB locked modifier bits [%x].\n", __func__, xkbev -> state.locked_mods); #endif xkbev -> type = nxagentXkbInfo.EventBase + XkbEventCode; xkbev -> any.xkb_type = XkbStateNotify; - nxagentHandleKeyboardEvent(&X); + nxagentHandleXkbKeyboardStateEvent(&X); return 1; } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.h b/nx-X11/programs/Xserver/hw/nxagent/Events.h index 7d313c331..bf9d10c74 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.h @@ -99,7 +99,7 @@ extern void nxagentGetEventMask(WindowPtr pWin, Mask *mask_return); * the internal state. This is unlikely to happen. */ -extern int nxagentInitKeyboardState(void); +extern int nxagentInitXkbKeyboardState(void); /* * Update the keyboard state according @@ -107,7 +107,7 @@ extern int nxagentInitKeyboardState(void); * from the remote X server. */ -extern int nxagentHandleKeyboardEvent(XEvent *X); +extern int nxagentHandleXkbKeyboardStateEvent(XEvent *X); /* * Handle sync and karma messages and -- cgit v1.2.3 From a02b645b23c912f064f40b7f06a4447dd0f83e97 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 13 Nov 2017 21:06:36 +0100 Subject: nxagent manpage: extend description of keyboard option --- nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 index 20838bdb8..a46974104 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 +++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 @@ -518,11 +518,14 @@ settings. .TP 8 .I / use the given model and layout. You can not modify keyboard rules, -variants or options. -.TP 8 -If \fIkeyboard\fR is omitted the internal defaults of \fBnxagent\fR -will used (rules: xfree86, layout: us, model: pc102). +variant or options. Instead preset values are used. These are +\fIxfree86\fR for rules and empty strings for variant and options. .RE +.TP 8 + +.PP +If \fIkeyboard\fR is omitted the internal defaults of \fBnxagent\fR will be used (rules: \fIxfree86\fR, layout: \fIus\fR, model: \fIpc102\fR, empty variant and options). + .TP 8 .B keyconv= set keycode conversion mode -- cgit v1.2.3