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 <[email protected]>
Reviewed-by: Ran Benita <[email protected]>
Reported-by: Christian Kellner <[email protected]>
---
 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

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to