aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar wm4 <wm4@nowhere>2015-02-13 21:42:39 +0100
committerGravatar wm4 <wm4@nowhere>2015-02-13 21:47:22 +0100
commit417869f845d34596d8651fd9c38e6c74d56fecee (patch)
treeb5c6c6c4da109f4fe10a777bfc0d7a5feab5bf15
parent32b56c56bad78d8d3038361aef6f36ad9cabebb0 (diff)
x11: make all XF86 special keys mappable
Makes all keys documented in XF86keysym.h mappable. This requires the user to deal with numeric keycodes; no names are queried or exported. This is an easy way to avoid adding all the hundreds of XF86 keys to our X11 lookup table and mpv's keycode/name list.
-rw-r--r--input/keycodes.h7
-rw-r--r--video/out/x11_common.c7
2 files changed, 13 insertions, 1 deletions
diff --git a/input/keycodes.h b/input/keycodes.h
index 53fb682e46..1326df6902 100644
--- a/input/keycodes.h
+++ b/input/keycodes.h
@@ -210,8 +210,13 @@
#define MP_AXIS_LEFT (MP_AXIS_BASE+2)
#define MP_AXIS_RIGHT (MP_AXIS_BASE+3)
+// Reserved area. Can be used for keys that have no explicit names assigned,
+// but should be mappable by the user anyway.
+#define MP_KEY_UNKNOWN_RESERVED_START (MP_KEY_BASE+0x10000)
+#define MP_KEY_UNKNOWN_RESERVED_LAST (MP_KEY_BASE+0x20000-1)
+
/* Special keys */
-#define MP_KEY_INTERN (MP_KEY_BASE+0x1000)
+#define MP_KEY_INTERN (MP_KEY_BASE+0x20000)
#define MP_KEY_CLOSE_WIN (MP_KEY_INTERN+0)
// Generated by input.c (VOs use mp_input_set_mouse_pos())
#define MP_KEY_MOUSE_MOVE ((MP_KEY_INTERN+1)|MP_NO_REPEAT_KEY)
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index 0e02069ae6..1f933bfcae 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -611,6 +611,13 @@ static int vo_x11_lookupkey(int key)
if (!mpkey)
mpkey = lookup_keymap_table(keymap, key);
+ // XFree86 keysym range; typically contains obscure "extra" keys
+ if (!mpkey && key >= 0x10080001 && key <= 0x1008FFFF) {
+ mpkey = MP_KEY_UNKNOWN_RESERVED_START + (key - 0x10080000);
+ if (mpkey > MP_KEY_UNKNOWN_RESERVED_LAST)
+ mpkey = 0;
+ }
+
return mpkey;
}