Widen keycode range to 8/255 if possible (bug #63390)
authorDaniel Stone <daniel@fooishbar.org>
Thu, 9 May 2013 13:47:09 +0000 (14:47 +0100)
committerDaniel Stone <daniel@fooishbar.org>
Thu, 9 May 2013 13:47:09 +0000 (14:47 +0100)
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>
src/utils.h
src/xkbcomp/keymap-dump.c
test/data/keymaps/stringcomp.data

index 160bc42..eca6368 100644 (file)
@@ -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);
 
index 034a8c1..0933873 100644 (file)
@@ -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;
index 7d21eb5..8f80fcc 100644 (file)
@@ -1,5 +1,7 @@
 xkb_keymap {
 xkb_keycodes "evdev_aliases(qwerty)" {
+       minimum = 8;
+       maximum = 255;
        <ESC>                = 9;
        <AE01>               = 10;
        <AE02>               = 11;