summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2013-05-09 14:47:09 +0100
committerDaniel Stone <daniel@fooishbar.org>2013-05-09 14:47:09 +0100
commit17a956d80781846903c90b7bd4beaf8ac7aac40c (patch)
tree549912d7d8644616cf24ede7a7c20353f2e0d7e6
parenta392d2682bfbf5ce6c3ee153c6a08bb456da0660 (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>
-rw-r--r--src/utils.h12
-rw-r--r--src/xkbcomp/keymap-dump.c7
-rw-r--r--test/data/keymaps/stringcomp.data2
3 files changed, 21 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;
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;
<ESC> = 9;
<AE01> = 10;
<AE02> = 11;