diff options
author | Daniel Stone <daniel@fooishbar.org> | 2013-05-09 14:47:09 +0100 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2013-05-09 14:47:09 +0100 |
commit | 17a956d80781846903c90b7bd4beaf8ac7aac40c (patch) | |
tree | 549912d7d8644616cf24ede7a7c20353f2e0d7e6 /src | |
parent | a392d2682bfbf5ce6c3ee153c6a08bb456da0660 (diff) |
Widen keycode range to 8/255 if possible (bug #63390)
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 <daniel@fooishbar.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/utils.h | 12 | ||||
-rw-r--r-- | src/xkbcomp/keymap-dump.c | 7 |
2 files changed, 19 insertions, 0 deletions
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; |