diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-12-22 00:46:02 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-12-22 00:46:02 +0200 |
commit | fccb0a7e45b61128262a396f2426bd7168fd198c (patch) | |
tree | ac09e6b90d4389717f32181f8b6f3848ffb149fe /libvo/x11_common.c | |
parent | 71b25cca7644ab059393e9ee4682d79aab41ceba (diff) | |
parent | ce821bd91f0b0c67b96f5d3b8f3fda19e1015294 (diff) | |
download | mpv-fccb0a7e45b61128262a396f2426bd7168fd198c.tar.bz2 mpv-fccb0a7e45b61128262a396f2426bd7168fd198c.tar.xz |
Merge svn changes up to r28176
Conflicts:
libvo/video_out.c
libvo/x11_common.c
Diffstat (limited to 'libvo/x11_common.c')
-rw-r--r-- | libvo/x11_common.c | 333 |
1 files changed, 59 insertions, 274 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 2dc594419a..9e6e31bd59 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -522,289 +522,74 @@ void vo_uninit(struct vo_x11_state *x11) #include "wskeys.h" #ifdef XF86XK_AudioPause +static const struct keymap keysym_map[] = { + {XF86XK_MenuKB, KEY_MENU}, + {XF86XK_AudioPlay, KEY_PLAY}, {XF86XK_AudioPause, KEY_PAUSE}, {XF86XK_AudioStop, KEY_STOP}, + {XF86XK_AudioPrev, KEY_PREV}, {XF86XK_AudioNext, KEY_NEXT}, + {XF86XK_AudioMute, KEY_MUTE}, {XF86XK_AudioLowerVolume, KEY_VOLUME_DOWN}, {XF86XK_AudioRaiseVolume, KEY_VOLUME_UP}, + {0, 0} +}; + static void vo_x11_putkey_ext(struct vo *vo, int keysym) { struct mp_fifo *f = vo->key_fifo; - switch (keysym) - { - case XF86XK_MenuKB: - mplayer_put_key(f, KEY_MENU); - break; - case XF86XK_AudioPlay: - mplayer_put_key(f, KEY_PLAY); - break; - case XF86XK_AudioPause: - mplayer_put_key(f, KEY_PAUSE); - break; - case XF86XK_AudioStop: - mplayer_put_key(f, KEY_STOP); - break; - case XF86XK_AudioPrev: - mplayer_put_key(f, KEY_PREV); - break; - case XF86XK_AudioNext: - mplayer_put_key(f, KEY_NEXT); - break; - case XF86XK_AudioMute: - mplayer_put_key(f, KEY_MUTE); - break; - case XF86XK_AudioLowerVolume: - mplayer_put_key(f, KEY_VOLUME_DOWN); - break; - case XF86XK_AudioRaiseVolume: - mplayer_put_key(f, KEY_VOLUME_UP); - break; - default: - break; - } + int mpkey = lookup_keymap_table(keysym_map, keysym); + if (mpkey) + mplayer_put_key(f, mpkey); } #endif +static const struct keymap 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(struct vo *vo, int key) { - struct mp_fifo *f = vo->key_fifo; - switch (key) - { - case wsLeft: - mplayer_put_key(f, KEY_LEFT); - break; - case wsRight: - mplayer_put_key(f, KEY_RIGHT); - break; - case wsUp: - mplayer_put_key(f, KEY_UP); - break; - case wsDown: - mplayer_put_key(f, KEY_DOWN); - break; - case wsSpace: - mplayer_put_key(f, ' '); - break; - case wsEscape: - mplayer_put_key(f, KEY_ESC); - break; - case wsTab: - mplayer_put_key(f, KEY_TAB); - break; - case wsEnter: - mplayer_put_key(f, KEY_ENTER); - break; - case wsBackSpace: - mplayer_put_key(f, KEY_BS); - break; - case wsDelete: - mplayer_put_key(f, KEY_DELETE); - break; - case wsInsert: - mplayer_put_key(f, KEY_INSERT); - break; - case wsHome: - mplayer_put_key(f, KEY_HOME); - break; - case wsEnd: - mplayer_put_key(f, KEY_END); - break; - case wsPageUp: - mplayer_put_key(f, KEY_PAGE_UP); - break; - case wsPageDown: - mplayer_put_key(f, KEY_PAGE_DOWN); - break; - case wsF1: - mplayer_put_key(f, KEY_F + 1); - break; - case wsF2: - mplayer_put_key(f, KEY_F + 2); - break; - case wsF3: - mplayer_put_key(f, KEY_F + 3); - break; - case wsF4: - mplayer_put_key(f, KEY_F + 4); - break; - case wsF5: - mplayer_put_key(f, KEY_F + 5); - break; - case wsF6: - mplayer_put_key(f, KEY_F + 6); - break; - case wsF7: - mplayer_put_key(f, KEY_F + 7); - break; - case wsF8: - mplayer_put_key(f, KEY_F + 8); - break; - case wsF9: - mplayer_put_key(f, KEY_F + 9); - break; - case wsF10: - mplayer_put_key(f, KEY_F + 10); - break; - case wsF11: - mplayer_put_key(f, KEY_F + 11); - break; - case wsF12: - mplayer_put_key(f, KEY_F + 12); - break; - case wsMinus: - case wsGrayMinus: - mplayer_put_key(f, '-'); - break; - case wsPlus: - case wsGrayPlus: - mplayer_put_key(f, '+'); - break; - case wsGrayMul: - case wsMul: - mplayer_put_key(f, '*'); - break; - case wsGrayDiv: - case wsDiv: - mplayer_put_key(f, '/'); - break; - case wsLess: - mplayer_put_key(f, '<'); - break; - case wsMore: - mplayer_put_key(f, '>'); - break; - case wsGray0: - mplayer_put_key(f, KEY_KP0); - break; - case wsGrayEnd: - case wsGray1: - mplayer_put_key(f, KEY_KP1); - break; - case wsGrayDown: - case wsGray2: - mplayer_put_key(f, KEY_KP2); - break; - case wsGrayPgDn: - case wsGray3: - mplayer_put_key(f, KEY_KP3); - break; - case wsGrayLeft: - case wsGray4: - mplayer_put_key(f, KEY_KP4); - break; - case wsGray5Dup: - case wsGray5: - mplayer_put_key(f, KEY_KP5); - break; - case wsGrayRight: - case wsGray6: - mplayer_put_key(f, KEY_KP6); - break; - case wsGrayHome: - case wsGray7: - mplayer_put_key(f, KEY_KP7); - break; - case wsGrayUp: - case wsGray8: - mplayer_put_key(f, KEY_KP8); - break; - case wsGrayPgUp: - case wsGray9: - mplayer_put_key(f, KEY_KP9); - break; - case wsGrayDecimal: - mplayer_put_key(f, KEY_KPDEC); - break; - case wsGrayInsert: - mplayer_put_key(f, KEY_KPINS); - break; - case wsGrayDelete: - mplayer_put_key(f, KEY_KPDEL); - break; - case wsGrayEnter: - mplayer_put_key(f, KEY_KPENTER); - break; - case wsGrave: - mplayer_put_key(f, '`'); - break; - case wsTilde: - mplayer_put_key(f, '~'); - break; - case wsExclSign: - mplayer_put_key(f, '!'); - break; - case wsAt: - mplayer_put_key(f, '@'); - break; - case wsHash: - mplayer_put_key(f, '#'); - break; - case wsDollar: - mplayer_put_key(f, '$'); - break; - case wsPercent: - mplayer_put_key(f, '%'); - break; - case wsCircumflex: - mplayer_put_key(f, '^'); - break; - case wsAmpersand: - mplayer_put_key(f, '&'); - break; - case wsobracket: - mplayer_put_key(f, '('); - break; - case wscbracket: - mplayer_put_key(f, ')'); - break; - case wsUnder: - mplayer_put_key(f, '_'); - break; - case wsocbracket: - mplayer_put_key(f, '{'); - break; - case wsccbracket: - mplayer_put_key(f, '}'); - break; - case wsColon: - mplayer_put_key(f, ':'); - break; - case wsSemicolon: - mplayer_put_key(f, ';'); - break; - case wsDblQuote: - mplayer_put_key(f, '\"'); - break; - case wsAcute: - mplayer_put_key(f, '\''); - break; - case wsComma: - mplayer_put_key(f, ','); - break; - case wsPoint: - mplayer_put_key(f, '.'); - break; - case wsQuestSign: - mplayer_put_key(f, '?'); - break; - case wsBSlash: - mplayer_put_key(f, '\\'); - break; - case wsPipe: - mplayer_put_key(f, '|'); - break; - case wsEqual: - mplayer_put_key(f, '='); - break; - case wsosbrackets: - mplayer_put_key(f, '['); - break; - case wscsbrackets: - mplayer_put_key(f, ']'); - break; - - - default: - if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z') || - (key >= '0' && key <= '9')) - mplayer_put_key(f, 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))) + mpkey = key; + + if (!mpkey) + mpkey = lookup_keymap_table(keymap, key); + if (mpkey) + mplayer_put_key(vo->key_fifo, mpkey); } |