From db218a8d25fd2fa161b9072e5534c917ce2398ff Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 13 Feb 2015 21:42:39 +0100 Subject: 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. (cherry picked from commit 417869f845d34596d8651fd9c38e6c74d56fecee) --- input/keycodes.h | 7 ++++++- video/out/x11_common.c | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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; } -- cgit v1.2.3