diff options
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/video_out.c | 8 | ||||
-rw-r--r-- | libvo/video_out.h | 4 | ||||
-rw-r--r-- | libvo/vo_xv.c | 5 | ||||
-rw-r--r-- | libvo/x11_common.c | 180 | ||||
-rw-r--r-- | libvo/x11_common.h | 2 |
5 files changed, 104 insertions, 95 deletions
diff --git a/libvo/video_out.c b/libvo/video_out.c index de060dacf6..78f1f71743 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -293,7 +293,8 @@ void list_video_out(void) mp_msg(MSGT_GLOBAL, MSGL_INFO,"\n"); } -struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11) +struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11, + struct mp_fifo *key_fifo) { char **vo_list = opts->video_driver_list; int i; @@ -316,7 +317,8 @@ struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11) const vo_info_t *info = video_driver->info; if (!strcmp(info->short_name, name)) { // name matches, try it - *vo = (struct vo){.opts = opts, .x11 = x11}; + *vo = (struct vo){.opts = opts, .x11 = x11, + .key_fifo = key_fifo}; vo->driver = video_driver; if (!vo_preinit(vo, vo_subdevice)) { free(name); @@ -334,7 +336,7 @@ struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11) vo_subdevice = NULL; for (i = 0; video_out_drivers[i]; i++) { const struct vo_driver *video_driver = video_out_drivers[i]; - *vo = (struct vo){.opts = opts, .x11 = x11}; + *vo = (struct vo){.opts = opts, .x11 = x11, key_fifo = key_fifo}; vo->driver = video_driver; if (!vo_preinit(vo, vo_subdevice)) return vo; // success! diff --git a/libvo/video_out.h b/libvo/video_out.h index 24dd5918cf..a62a9b335b 100644 --- a/libvo/video_out.h +++ b/libvo/video_out.h @@ -213,6 +213,7 @@ struct vo { void *priv; struct MPOpts *opts; struct vo_x11_state *x11; + struct mp_fifo *key_fifo; // requested position/resolution int dx; @@ -221,7 +222,8 @@ struct vo { int dheight; }; -struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11); +struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11, + struct mp_fifo *key_fifo); int vo_config(struct vo *vo, uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format); diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c index 885bd0f7f1..29374ed0e6 100644 --- a/libvo/vo_xv.c +++ b/libvo/vo_xv.c @@ -718,8 +718,9 @@ static void uninit(struct vo *vo) static int x11_fd_callback(void *ctx, int fd) { - check_events(ctx); - return mplayer_get_key(NULL, 0); + struct vo *vo = ctx; + check_events(vo); + return mplayer_get_key(vo->key_fifo, 0); } static int preinit(struct vo *vo, const char *arg) diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 617c6be0e9..76ccad6e35 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -537,27 +537,28 @@ void vo_uninit(struct vo_x11_state *x11) #include "wskeys.h" #ifdef XF86XK_AudioPause -static void vo_x11_putkey_ext(int keysym) +static void vo_x11_putkey_ext(struct vo *vo, int keysym) { + struct mp_fifo *f = vo->key_fifo; switch (keysym) { case XF86XK_AudioPause: - mplayer_put_key(KEY_PAUSE); + mplayer_put_key(f, KEY_PAUSE); break; case XF86XK_AudioStop: - mplayer_put_key(KEY_STOP); + mplayer_put_key(f, KEY_STOP); break; case XF86XK_AudioPrev: - mplayer_put_key(KEY_PREV); + mplayer_put_key(f, KEY_PREV); break; case XF86XK_AudioNext: - mplayer_put_key(KEY_NEXT); + mplayer_put_key(f, KEY_NEXT); break; case XF86XK_AudioLowerVolume: - mplayer_put_key(KEY_VOLUME_DOWN); + mplayer_put_key(f, KEY_VOLUME_DOWN); break; case XF86XK_AudioRaiseVolume: - mplayer_put_key(KEY_VOLUME_UP); + mplayer_put_key(f, KEY_VOLUME_UP); break; default: break; @@ -565,248 +566,249 @@ static void vo_x11_putkey_ext(int keysym) } #endif -void vo_x11_putkey(int key) +void vo_x11_putkey(struct vo *vo, int key) { + struct mp_fifo *f = vo->key_fifo; switch (key) { case wsLeft: - mplayer_put_key(KEY_LEFT); + mplayer_put_key(f, KEY_LEFT); break; case wsRight: - mplayer_put_key(KEY_RIGHT); + mplayer_put_key(f, KEY_RIGHT); break; case wsUp: - mplayer_put_key(KEY_UP); + mplayer_put_key(f, KEY_UP); break; case wsDown: - mplayer_put_key(KEY_DOWN); + mplayer_put_key(f, KEY_DOWN); break; case wsSpace: - mplayer_put_key(' '); + mplayer_put_key(f, ' '); break; case wsEscape: - mplayer_put_key(KEY_ESC); + mplayer_put_key(f, KEY_ESC); break; case wsTab: - mplayer_put_key(KEY_TAB); + mplayer_put_key(f, KEY_TAB); break; case wsEnter: - mplayer_put_key(KEY_ENTER); + mplayer_put_key(f, KEY_ENTER); break; case wsBackSpace: - mplayer_put_key(KEY_BS); + mplayer_put_key(f, KEY_BS); break; case wsDelete: - mplayer_put_key(KEY_DELETE); + mplayer_put_key(f, KEY_DELETE); break; case wsInsert: - mplayer_put_key(KEY_INSERT); + mplayer_put_key(f, KEY_INSERT); break; case wsHome: - mplayer_put_key(KEY_HOME); + mplayer_put_key(f, KEY_HOME); break; case wsEnd: - mplayer_put_key(KEY_END); + mplayer_put_key(f, KEY_END); break; case wsPageUp: - mplayer_put_key(KEY_PAGE_UP); + mplayer_put_key(f, KEY_PAGE_UP); break; case wsPageDown: - mplayer_put_key(KEY_PAGE_DOWN); + mplayer_put_key(f, KEY_PAGE_DOWN); break; case wsF1: - mplayer_put_key(KEY_F + 1); + mplayer_put_key(f, KEY_F + 1); break; case wsF2: - mplayer_put_key(KEY_F + 2); + mplayer_put_key(f, KEY_F + 2); break; case wsF3: - mplayer_put_key(KEY_F + 3); + mplayer_put_key(f, KEY_F + 3); break; case wsF4: - mplayer_put_key(KEY_F + 4); + mplayer_put_key(f, KEY_F + 4); break; case wsF5: - mplayer_put_key(KEY_F + 5); + mplayer_put_key(f, KEY_F + 5); break; case wsF6: - mplayer_put_key(KEY_F + 6); + mplayer_put_key(f, KEY_F + 6); break; case wsF7: - mplayer_put_key(KEY_F + 7); + mplayer_put_key(f, KEY_F + 7); break; case wsF8: - mplayer_put_key(KEY_F + 8); + mplayer_put_key(f, KEY_F + 8); break; case wsF9: - mplayer_put_key(KEY_F + 9); + mplayer_put_key(f, KEY_F + 9); break; case wsF10: - mplayer_put_key(KEY_F + 10); + mplayer_put_key(f, KEY_F + 10); break; case wsF11: - mplayer_put_key(KEY_F + 11); + mplayer_put_key(f, KEY_F + 11); break; case wsF12: - mplayer_put_key(KEY_F + 12); + mplayer_put_key(f, KEY_F + 12); break; case wsMinus: case wsGrayMinus: - mplayer_put_key('-'); + mplayer_put_key(f, '-'); break; case wsPlus: case wsGrayPlus: - mplayer_put_key('+'); + mplayer_put_key(f, '+'); break; case wsGrayMul: case wsMul: - mplayer_put_key('*'); + mplayer_put_key(f, '*'); break; case wsGrayDiv: case wsDiv: - mplayer_put_key('/'); + mplayer_put_key(f, '/'); break; case wsLess: - mplayer_put_key('<'); + mplayer_put_key(f, '<'); break; case wsMore: - mplayer_put_key('>'); + mplayer_put_key(f, '>'); break; case wsGray0: - mplayer_put_key(KEY_KP0); + mplayer_put_key(f, KEY_KP0); break; case wsGrayEnd: case wsGray1: - mplayer_put_key(KEY_KP1); + mplayer_put_key(f, KEY_KP1); break; case wsGrayDown: case wsGray2: - mplayer_put_key(KEY_KP2); + mplayer_put_key(f, KEY_KP2); break; case wsGrayPgDn: case wsGray3: - mplayer_put_key(KEY_KP3); + mplayer_put_key(f, KEY_KP3); break; case wsGrayLeft: case wsGray4: - mplayer_put_key(KEY_KP4); + mplayer_put_key(f, KEY_KP4); break; case wsGray5Dup: case wsGray5: - mplayer_put_key(KEY_KP5); + mplayer_put_key(f, KEY_KP5); break; case wsGrayRight: case wsGray6: - mplayer_put_key(KEY_KP6); + mplayer_put_key(f, KEY_KP6); break; case wsGrayHome: case wsGray7: - mplayer_put_key(KEY_KP7); + mplayer_put_key(f, KEY_KP7); break; case wsGrayUp: case wsGray8: - mplayer_put_key(KEY_KP8); + mplayer_put_key(f, KEY_KP8); break; case wsGrayPgUp: case wsGray9: - mplayer_put_key(KEY_KP9); + mplayer_put_key(f, KEY_KP9); break; case wsGrayDecimal: - mplayer_put_key(KEY_KPDEC); + mplayer_put_key(f, KEY_KPDEC); break; case wsGrayInsert: - mplayer_put_key(KEY_KPINS); + mplayer_put_key(f, KEY_KPINS); break; case wsGrayDelete: - mplayer_put_key(KEY_KPDEL); + mplayer_put_key(f, KEY_KPDEL); break; case wsGrayEnter: - mplayer_put_key(KEY_KPENTER); + mplayer_put_key(f, KEY_KPENTER); break; case wsGrave: - mplayer_put_key('`'); + mplayer_put_key(f, '`'); break; case wsTilde: - mplayer_put_key('~'); + mplayer_put_key(f, '~'); break; case wsExclSign: - mplayer_put_key('!'); + mplayer_put_key(f, '!'); break; case wsAt: - mplayer_put_key('@'); + mplayer_put_key(f, '@'); break; case wsHash: - mplayer_put_key('#'); + mplayer_put_key(f, '#'); break; case wsDollar: - mplayer_put_key('$'); + mplayer_put_key(f, '$'); break; case wsPercent: - mplayer_put_key('%'); + mplayer_put_key(f, '%'); break; case wsCircumflex: - mplayer_put_key('^'); + mplayer_put_key(f, '^'); break; case wsAmpersand: - mplayer_put_key('&'); + mplayer_put_key(f, '&'); break; case wsobracket: - mplayer_put_key('('); + mplayer_put_key(f, '('); break; case wscbracket: - mplayer_put_key(')'); + mplayer_put_key(f, ')'); break; case wsUnder: - mplayer_put_key('_'); + mplayer_put_key(f, '_'); break; case wsocbracket: - mplayer_put_key('{'); + mplayer_put_key(f, '{'); break; case wsccbracket: - mplayer_put_key('}'); + mplayer_put_key(f, '}'); break; case wsColon: - mplayer_put_key(':'); + mplayer_put_key(f, ':'); break; case wsSemicolon: - mplayer_put_key(';'); + mplayer_put_key(f, ';'); break; case wsDblQuote: - mplayer_put_key('\"'); + mplayer_put_key(f, '\"'); break; case wsAcute: - mplayer_put_key('\''); + mplayer_put_key(f, '\''); break; case wsComma: - mplayer_put_key(','); + mplayer_put_key(f, ','); break; case wsPoint: - mplayer_put_key('.'); + mplayer_put_key(f, '.'); break; case wsQuestSign: - mplayer_put_key('?'); + mplayer_put_key(f, '?'); break; case wsBSlash: - mplayer_put_key('\\'); + mplayer_put_key(f, '\\'); break; case wsPipe: - mplayer_put_key('|'); + mplayer_put_key(f, '|'); break; case wsEqual: - mplayer_put_key('='); + mplayer_put_key(f, '='); break; case wsosbrackets: - mplayer_put_key('['); + mplayer_put_key(f, '['); break; case wscsbrackets: - mplayer_put_key(']'); + mplayer_put_key(f, ']'); break; default: if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z') || (key >= '0' && key <= '9')) - mplayer_put_key(key); + mplayer_put_key(f, key); } } @@ -1045,12 +1047,12 @@ int vo_x11_check_events(struct vo *vo) XLookupString(&Event.xkey, buf, sizeof(buf), &keySym, &x11->compose_status); #ifdef XF86XK_AudioPause - vo_x11_putkey_ext(keySym); + vo_x11_putkey_ext(vo, keySym); #endif key = ((keySym & 0xff00) != 0 ? ((keySym & 0x00ff) + 256) : (keySym)); - vo_x11_putkey(key); + vo_x11_putkey(vo, key); ret |= VO_EVENT_KEYPRESS; } break; @@ -1082,8 +1084,9 @@ int vo_x11_check_events(struct vo *vo) && (Event.xbutton.button <= 3)) break; #endif - mplayer_put_key((MOUSE_BTN0 + Event.xbutton.button - - 1) | MP_KEY_DOWN); + mplayer_put_key(vo->key_fifo, + (MOUSE_BTN0 + Event.xbutton.button - 1) + | MP_KEY_DOWN); break; case ButtonRelease: if (x11->vo_mouse_autohide) @@ -1098,7 +1101,8 @@ int vo_x11_check_events(struct vo *vo) && (Event.xbutton.button <= 3)) break; #endif - mplayer_put_key(MOUSE_BTN0 + Event.xbutton.button - 1); + mplayer_put_key(vo->key_fifo, + MOUSE_BTN0 + Event.xbutton.button - 1); break; case PropertyNotify: { @@ -1121,7 +1125,7 @@ int vo_x11_check_events(struct vo *vo) case ClientMessage: if (Event.xclient.message_type == x11->XAWM_PROTOCOLS && Event.xclient.data.l[0] == x11->XAWM_DELETE_WINDOW) - mplayer_put_key(KEY_CLOSE_WIN); + mplayer_put_key(vo->key_fifo, KEY_CLOSE_WIN); break; } } diff --git a/libvo/x11_common.h b/libvo/x11_common.h index f2fa160ff4..cbf374f86c 100644 --- a/libvo/x11_common.h +++ b/libvo/x11_common.h @@ -137,7 +137,7 @@ void xv_setup_colorkeyhandling(struct vo *vo, const char *ck_method_str, const c int xv_test_ck( void * arg ); int xv_test_ckm( void * arg ); - extern void vo_x11_putkey(int key); +void vo_x11_putkey(struct vo *vo, int key); #ifdef HAVE_XF86VM void vo_vm_switch(struct vo *vo, uint32_t, uint32_t, int*, int*); |