From 17a956d80781846903c90b7bd4beaf8ac7aac40c Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Thu, 9 May 2013 14:47:09 +0100 Subject: [PATCH] Widen keycode range to 8/255 if possible (bug #63390) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If the keycode range is smaller than 8 → 255, artifically widen it when dumping the keymap as not to displease X. Signed-off-by: Daniel Stone --- src/utils.h | 12 ++++++++++++ src/xkbcomp/keymap-dump.c | 7 +++++++ test/data/keymaps/stringcomp.data | 2 ++ 3 files changed, 21 insertions(+) diff --git a/src/utils.h b/src/utils.h index 160bc42..eca6368 100644 --- a/src/utils.h +++ b/src/utils.h @@ -93,6 +93,18 @@ memdup(const void *mem, size_t nmemb, size_t size) return p; } +static inline int +min(int misc, int other) +{ + return (misc < other) ? misc : other; +} + +static inline int +max(int misc, int other) +{ + return (misc > other) ? misc : other; +} + bool map_file(FILE *file, const char **string_out, size_t *size_out); diff --git a/src/xkbcomp/keymap-dump.c b/src/xkbcomp/keymap-dump.c index 034a8c1..0933873 100644 --- a/src/xkbcomp/keymap-dump.c +++ b/src/xkbcomp/keymap-dump.c @@ -157,6 +157,13 @@ write_keycodes(struct xkb_keymap *keymap, struct buf *buf) else write_buf(buf, "xkb_keycodes {\n"); + /* xkbcomp and X11 really want to see keymaps with a minimum of 8, and + * a maximum of at least 255, else XWayland really starts hating life. + * If this is a problem and people really need strictly bounded keymaps, + * we should probably control this with a flag. */ + write_buf(buf, "\tminimum = %d;\n", min(keymap->min_key_code, 8)); + write_buf(buf, "\tmaximum = %d;\n", max(keymap->max_key_code, 255)); + xkb_foreach_key(key, keymap) { if (key->name == XKB_ATOM_NONE) continue; diff --git a/test/data/keymaps/stringcomp.data b/test/data/keymaps/stringcomp.data index 7d21eb5..8f80fcc 100644 --- a/test/data/keymaps/stringcomp.data +++ b/test/data/keymaps/stringcomp.data @@ -1,5 +1,7 @@ xkb_keymap { xkb_keycodes "evdev_aliases(qwerty)" { + minimum = 8; + maximum = 255; = 9; = 10; = 11; -- 2.7.4