[PATCH app/xkbcomp v2] keycodes: Ignore high keycodes

Peter Hutterer peter.hutterer at who-t.net
Fri Apr 7 23:26:50 UTC 2017


On Fri, Apr 07, 2017 at 09:55:02AM +0100, Daniel Stone wrote:
> Rather than throwing a fatal error when a keycode definition exceeds the
> declared maximum (i.e. 255), just ignore the definition and continue.
> 
> This allows xkeyboard-config to start shipping datasets including high
> keycodes, which will work in xkbcommon as it ignores explicit range
> declarations.
> 
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> Reviewed-by: Ran Benita <ran234 at gmail.com>
> Reported-by: Christian Kellner <gicmo at gnome.org>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net> but please fix up the
tabs to spaces before pushing, thanks.

Cheers,
   Peter

> ---
>  keycodes.c | 28 ++++++++++++++++++++--------
>  1 file changed, 20 insertions(+), 8 deletions(-)
> 
> v2: Print a more verbose warning, but only print it once.
> 
> diff --git a/keycodes.c b/keycodes.c
> index 22d9eae..09a861e 100644
> --- a/keycodes.c
> +++ b/keycodes.c
> @@ -31,6 +31,8 @@
>  #include "misc.h"
>  #include "alias.h"
>  
> +static Bool high_keycode_warned;
> +
>  char *
>  longText(unsigned long val, unsigned format)
>  {
> @@ -330,10 +332,15 @@ AddKeyName(KeyNamesInfo * info,
>  
>      if ((kc < info->effectiveMin) || (kc > info->effectiveMax))
>      {
> -        ERROR2("Illegal keycode %d for name <%s>\n", kc, name);
> -        ACTION2("Must be in the range %d-%d inclusive\n",
> -                info->effectiveMin, info->effectiveMax);
> -        return False;
> +	if (!high_keycode_warned)
> +	{
> +            WARN2("Unsupported high keycode %d for name <%s> ignored\n",
> +	          kc, name);
> +	    ACTION2("X11 cannot support keycodes above 255.\n");
> +	    ACTION2("This warning only shows for the first high keycode.\n");
> +	    high_keycode_warned = True;
> +	}
> +        return True;
>      }
>      if (kc < info->computedMin)
>          info->computedMin = kc;
> @@ -589,10 +596,15 @@ HandleKeycodeDef(KeycodeDef * stmt, unsigned merge, KeyNamesInfo * info)
>      code = result.ival;
>      if ((code < info->effectiveMin) || (code > info->effectiveMax))
>      {
> -        ERROR2("Illegal keycode %d for name <%s>\n", code, stmt->name);
> -        ACTION2("Must be in the range %d-%d inclusive\n",
> -                info->effectiveMin, info->effectiveMax);
> -        return 0;
> +	if (!high_keycode_warned)
> +	{
> +            WARN2("Unsupported high keycode %d for name <%s> ignored\n",
> +	          code, stmt->name);
> +	    ACTION2("X11 cannot support keycodes above 255.\n");
> +	    ACTION2("This warning only shows for the first high keycode.\n");
> +	    high_keycode_warned = True;
> +	}
> +        return 1;
>      }
>      if (stmt->merge != MergeDefault)
>      {
> -- 
> 2.12.2
> 


More information about the xorg-devel mailing list