summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-12-20 11:12:45 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-12-20 11:12:45 +0000
commitc4460fd32ce0d198cc593184c899bc78db1833b6 (patch)
tree06fdf378cbdf635ecb1e770dca3f78c2eb9f1c6d /libvo
parent7d037f66a5e3c7ada2e4105f18e25b14856cd05d (diff)
downloadmpv-c4460fd32ce0d198cc593184c899bc78db1833b6.tar.bz2
mpv-c4460fd32ce0d198cc593184c899bc78db1833b6.tar.xz
Use a table to translate X11 to MPlayer keycodes.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28170 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/x11_common.c191
1 files changed, 46 insertions, 145 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index b02dc43953..371032f27e 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -580,160 +580,61 @@ static void vo_x11_putkey_ext(int keysym)
}
#endif
+struct {
+ int x11key;
+ int mpkey;
+} static const keymap[] = {
+ // special keys
+ {wsEscape, KEY_ESC}, {wsBackSpace, KEY_BS}, {wsTab, KEY_TAB}, {wsEnter, KEY_ENTER},
+
+ // cursor keys
+ {wsLeft, KEY_LEFT}, {wsRight, KEY_RIGHT}, {wsUp, KEY_UP}, {wsDown, KEY_DOWN},
+
+ // navigation block
+ {wsInsert, KEY_INSERT}, {wsDelete, KEY_DELETE}, {wsHome, KEY_HOME}, {wsEnd, KEY_END},
+ {wsPageUp, KEY_PAGE_UP}, {wsPageDown, KEY_PAGE_DOWN},
+
+ // F-keys
+ {wsF1, KEY_F+1}, {wsF2, KEY_F+2}, {wsF3, KEY_F+3}, {wsF4, KEY_F+4},
+ {wsF5, KEY_F+5}, {wsF6, KEY_F+6}, {wsF7, KEY_F+7}, {wsF8, KEY_F+8},
+ {wsF9, KEY_F+9}, {wsF10, KEY_F+10}, {wsF11, KEY_F+11}, {wsF12, KEY_F+12},
+
+ // numpad independent of numlock
+ {wsGrayMinus, '-'}, {wsGrayPlus, '+'}, {wsGrayMul, '*'}, {wsGrayDiv, '/'},
+ {wsGrayEnter, KEY_KPENTER},
+
+ // numpad with numlock
+ {wsGray0, KEY_KP0}, {wsGray1, KEY_KP1}, {wsGray2, KEY_KP2},
+ {wsGray3, KEY_KP3}, {wsGray4, KEY_KP4}, {wsGray5, KEY_KP5},
+ {wsGray6, KEY_KP6}, {wsGray7, KEY_KP7}, {wsGray8, KEY_KP8},
+ {wsGray9, KEY_KP9}, {wsGrayDecimal, KEY_KPDEC},
+
+ // numpad without numlock
+ {wsGrayInsert, KEY_KPINS}, {wsGrayEnd, KEY_KP1}, {wsGrayDown, KEY_KP2},
+ {wsGrayPgDn, KEY_KP3}, {wsGrayLeft, KEY_KP4}, {wsGray5Dup, KEY_KP5},
+ {wsGrayRight, KEY_KP6}, {wsGrayHome, KEY_KP7}, {wsGrayUp, KEY_KP8},
+ {wsGrayPgUp, KEY_KP9}, {wsGrayDelete, KEY_KPDEL},
+
+ {0, 0}
+};
+
void vo_x11_putkey(int key)
{
static const char *passthrough_keys = " -+*/<>`~!@#$%^&()_{}:;\"\',.?\\|=[]";
+ int mpkey = 0;
+ int i;
if ((key >= 'a' && key <= 'z') ||
(key >= 'A' && key <= 'Z') ||
(key >= '0' && key <= '9') ||
(key > 0 && key < 256 && strchr(passthrough_keys, key)))
- mplayer_put_key(key);
+ mpkey = key;
- switch (key)
- {
- case wsLeft:
- mplayer_put_key(KEY_LEFT);
- break;
- case wsRight:
- mplayer_put_key(KEY_RIGHT);
- break;
- case wsUp:
- mplayer_put_key(KEY_UP);
- break;
- case wsDown:
- mplayer_put_key(KEY_DOWN);
- break;
- case wsEscape:
- mplayer_put_key(KEY_ESC);
- break;
- case wsTab:
- mplayer_put_key(KEY_TAB);
- break;
- case wsEnter:
- mplayer_put_key(KEY_ENTER);
- break;
- case wsBackSpace:
- mplayer_put_key(KEY_BS);
- break;
- case wsDelete:
- mplayer_put_key(KEY_DELETE);
- break;
- case wsInsert:
- mplayer_put_key(KEY_INSERT);
- break;
- case wsHome:
- mplayer_put_key(KEY_HOME);
- break;
- case wsEnd:
- mplayer_put_key(KEY_END);
- break;
- case wsPageUp:
- mplayer_put_key(KEY_PAGE_UP);
- break;
- case wsPageDown:
- mplayer_put_key(KEY_PAGE_DOWN);
- break;
- case wsF1:
- mplayer_put_key(KEY_F + 1);
- break;
- case wsF2:
- mplayer_put_key(KEY_F + 2);
- break;
- case wsF3:
- mplayer_put_key(KEY_F + 3);
- break;
- case wsF4:
- mplayer_put_key(KEY_F + 4);
- break;
- case wsF5:
- mplayer_put_key(KEY_F + 5);
- break;
- case wsF6:
- mplayer_put_key(KEY_F + 6);
- break;
- case wsF7:
- mplayer_put_key(KEY_F + 7);
- break;
- case wsF8:
- mplayer_put_key(KEY_F + 8);
- break;
- case wsF9:
- mplayer_put_key(KEY_F + 9);
- break;
- case wsF10:
- mplayer_put_key(KEY_F + 10);
- break;
- case wsF11:
- mplayer_put_key(KEY_F + 11);
- break;
- case wsF12:
- mplayer_put_key(KEY_F + 12);
- break;
- case wsGrayMinus:
- mplayer_put_key('-');
- break;
- case wsGrayPlus:
- mplayer_put_key('+');
- break;
- case wsGrayMul:
- mplayer_put_key('*');
- break;
- case wsGrayDiv:
- mplayer_put_key('/');
- break;
- case wsGray0:
- mplayer_put_key(KEY_KP0);
- break;
- case wsGrayEnd:
- case wsGray1:
- mplayer_put_key(KEY_KP1);
- break;
- case wsGrayDown:
- case wsGray2:
- mplayer_put_key(KEY_KP2);
- break;
- case wsGrayPgDn:
- case wsGray3:
- mplayer_put_key(KEY_KP3);
- break;
- case wsGrayLeft:
- case wsGray4:
- mplayer_put_key(KEY_KP4);
- break;
- case wsGray5Dup:
- case wsGray5:
- mplayer_put_key(KEY_KP5);
- break;
- case wsGrayRight:
- case wsGray6:
- mplayer_put_key(KEY_KP6);
- break;
- case wsGrayHome:
- case wsGray7:
- mplayer_put_key(KEY_KP7);
- break;
- case wsGrayUp:
- case wsGray8:
- mplayer_put_key(KEY_KP8);
- break;
- case wsGrayPgUp:
- case wsGray9:
- mplayer_put_key(KEY_KP9);
- break;
- case wsGrayDecimal:
- mplayer_put_key(KEY_KPDEC);
- break;
- case wsGrayInsert:
- mplayer_put_key(KEY_KPINS);
- break;
- case wsGrayDelete:
- mplayer_put_key(KEY_KPDEL);
- break;
- case wsGrayEnter:
- mplayer_put_key(KEY_KPENTER);
- break;
- }
+ for (i = 0; !mpkey && keymap[i].x11key; i++)
+ if (keymap[i].x11key == key)
+ mpkey = keymap[i].mpkey;
+ if (mpkey)
+ mplayer_put_key(mpkey);
}