diff options
Diffstat (limited to 'nx-X11')
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Args.c | 19 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 28 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Options.c | 4 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Options.h | 13 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 | 13 |
5 files changed, 72 insertions, 5 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index ea970be02..cccfd40e0 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -1483,6 +1483,25 @@ static void nxagentParseOptions(char *name, char *value) return; } + else if (!strcmp(name, "keyconv")) + { + if (!strcmp(value, "off")) { + nxagentChangeOption(KeycodeConversion, KeycodeConversionOff); + } + else if (!strcmp(value, "on")) { + nxagentChangeOption(KeycodeConversion, KeycodeConversionOn); + } + else if (!strcmp(value, "auto")) { + nxagentChangeOption(KeycodeConversion, KeycodeConversionAuto); + } + else + { + fprintf(stderr, "Warning: Ignoring bad value '%s' for option 'keyconv'.\n", + validateString(value)); + } + + return; + } else { #ifdef DEBUG diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 02b60bef4..51f57a897 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -475,11 +475,11 @@ static CARD8 nxagentConvertedKeycodes[] = /* 255 */ 255 }; -static int nxagentKeycodeConversion = 0; +static Bool nxagentKeycodeConversion = False; CARD8 nxagentConvertKeycode(CARD8 k) { - if (nxagentKeycodeConversion != 0) + if (nxagentKeycodeConversion) { #ifdef DEBUG if (k != nxagentConvertedKeycodes[k]) @@ -1821,7 +1821,20 @@ void nxagentKeycodeConversionSetup(void) char *doptions = NULL; unsigned int drulesLen; - nxagentKeycodeConversion = 0; + if (nxagentOption(KeycodeConversion) == KeycodeConversionOff) + { + fprintf(stderr, "Info: Keycode conversion is off\n"); + nxagentKeycodeConversion = False; + return; + } + else if (nxagentOption(KeycodeConversion) == KeycodeConversionOn) + { + fprintf(stderr, "Info: Keycode conversion is on\n"); + nxagentKeycodeConversion = True; + return; + } + + nxagentKeycodeConversion = False; drulesLen = nxagentXkbGetNames(&drules, &dmodel, &dlayout, &dvariant, &doptions); @@ -1894,7 +1907,12 @@ void nxagentKeycodeConversionSetup(void) "Activating KeyCode conversion.\n"); #endif - nxagentKeycodeConversion = 1; + fprintf(stderr, "Info: Keycode conversion auto-determined as on\n"); + nxagentKeycodeConversion = True; + } + else + { + fprintf(stderr, "Info: Keycode conversion auto-determined as off\n"); } if (drules != NULL) @@ -1923,7 +1941,7 @@ void nxagentResetKeycodeConversion(void) "WARNING! Failed to query XKB extension.\n"); #endif - nxagentKeycodeConversion = 0; + nxagentKeycodeConversion = False; } } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.c b/nx-X11/programs/Xserver/hw/nxagent/Options.c index 978f3ab95..3464fdb10 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Options.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Options.c @@ -168,6 +168,8 @@ void nxagentInitOptions() nxagentOptions.SleepTime = DEFAULT_SLEEP_TIME; nxagentOptions.ReconnectTolerance = DEFAULT_TOLERANCE; + + nxagentOptions.KeycodeConversion = DEFAULT_KEYCODE_CONVERSION; } /* @@ -193,6 +195,8 @@ void nxagentResetOptions() nxagentOptions.WMBorderWidth = -1; nxagentOptions.WMTitleHeight = -1; + + nxagentOptions.KeycodeConversion = DEFAULT_KEYCODE_CONVERSION; } void nxagentSaveOptions() diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.h b/nx-X11/programs/Xserver/hw/nxagent/Options.h index 20616a90b..95b0642e1 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Options.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Options.h @@ -78,6 +78,15 @@ typedef enum _ToleranceChecksMode #define DEFAULT_TOLERANCE ToleranceChecksStrict +typedef enum _KeycodeConversion +{ + KeycodeConversionOn = 0, + KeycodeConversionOff = 1, + KeycodeConversionAuto = 2 +} KeycodeConversionMode; + +#define DEFAULT_KEYCODE_CONVERSION KeycodeConversionAuto + /* * Set of options affecting agent operations. */ @@ -431,6 +440,10 @@ typedef struct _AgentOptions ToleranceChecksMode ReconnectTolerance; + /* + * Convert evdev keycodes to pc105. + */ + KeycodeConversionMode KeycodeConversion; } AgentOptionsRec; typedef AgentOptionsRec *AgentOptionsPtr; diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 index 43b3381d5..e5393c71e 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 +++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 @@ -491,6 +491,19 @@ start or resume a session in fullscreen mode (default: off) .B keyboard=<string> set remote keyboard layout .TP 8 +.B keyconv=<string> +set keycode conversion mode + +.BR auto | on | off + +by default (\fIauto\fR) \fBnxagent\fR will activate keycode conversion +if it detects an evdev XKEYBOARD setup on the client side (the +standard on linux systems nowadays). Keycode conversion means that +certain keycodes are mapped to make the keyboard appear as an pc105 +model. Using \fIoff\fR this conversion can be suppressed and with +\fIon\fR it will be forced. + +.TP 8 .B clipboard=<string> .BR both | client | server | none |