summaryrefslogtreecommitdiff
path: root/keycodes.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2018-06-07 11:25:01 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2018-06-08 08:27:16 +1000
commit5bc2849273a224a2df593b7e8df31f0bde666482 (patch)
treeae10462c1ce1290025528a15d1399926c0021b64 /keycodes.c
parent34842845b191082fd1cfff3b7038332cdcadb825 (diff)
downloadxorg-app-xkbcomp-5bc2849273a224a2df593b7e8df31f0bde666482.tar.gz
Ignore xkb_keycodes.maximum of > 255
Continuation from 7fdfabd75 "keycodes: Ignore high keycodes" A keymap with a key > 255 will have a xkb_keycodes.maximum of that keycode. Let's not throw a fatal error on that, just crop it back to the maximum of 255. This doesn't set the "high_keycode_warned" on purpose so we get this for the first key that actually matters. Reproducible with xkeyboard-config 2.24 which has a maximum of 374. https://bugzilla.redhat.com/show_bug.cgi?id=1587998 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Diffstat (limited to 'keycodes.c')
-rw-r--r--keycodes.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/keycodes.c b/keycodes.c
index d5ac762..c21f7c4 100644
--- a/keycodes.c
+++ b/keycodes.c
@@ -663,7 +663,7 @@ HandleKeyNameVar(VarDef * stmt, KeyNamesInfo * info)
ACTION1("Assignment to field %s ignored\n", field.str);
return 0;
}
- if ((tmp.ival < XkbMinLegalKeyCode) || (tmp.ival > XkbMaxLegalKeyCode))
+ if ((tmp.ival < XkbMinLegalKeyCode))
{
ERROR3
("Illegal keycode %d (must be in the range %d-%d inclusive)\n",
@@ -671,6 +671,14 @@ HandleKeyNameVar(VarDef * stmt, KeyNamesInfo * info)
ACTION1("Value of \"%s\" not changed\n", field.str);
return 0;
}
+ if ((tmp.ival > XkbMaxLegalKeyCode))
+ {
+ WARN2("Unsupported maximum keycode %d, clipping.\n", tmp.ival);
+ ACTION2("X11 cannot support keycodes above 255.\n");
+ info->explicitMax = XkbMaxLegalKeyCode;
+ info->effectiveMax = XkbMaxLegalKeyCode;
+ return 1;
+ }
if (which == MIN_KEYCODE_DEF)
{
if ((info->explicitMax > 0) && (info->explicitMax < tmp.ival))