# HG changeset patch # User joey # Date 1070210170 0 # Node ID 85e503ddf65f4f2e591e6fe9b10217fd61ea0e59 # Parent 753ca0c449138bc432925cc708dfd3651d90d598 runtime 'stay-on-top' functionality diff -r 753ca0c44913 -r 85e503ddf65f DOCS/man/en/mplayer.1 --- a/DOCS/man/en/mplayer.1 Sun Nov 30 14:45:42 2003 +0000 +++ b/DOCS/man/en/mplayer.1 Sun Nov 30 16:36:10 2003 +0000 @@ -278,6 +278,9 @@ mute sound .IPs f\ \ \ \ toggle fullscreen +.IPs T\ \ \ \ +toggle stay-on-top. +Supported by drivers which use X11, except SDL, as well as directx and gl2 under Windows. .IPs "w and e" decrease/\:increase panscan range .IPs o\ \ \ \ @@ -1809,6 +1812,10 @@ .B \-noxv (SDL only) Disables XVideo SDL driver. .TP +.B \-ontop +Makes the player window stay on top other windows. +Supported by drivers which use X11, except SDL, as well as directx and gl2 under Windows. +.TP .B \-panscan <0.0\-1.0> Enables Pan & Scan functionality, i.e.\& in order to display a 16:9 movie on a 4:3 display, the sides of the movie are cropped to get a 4:3 image diff -r 753ca0c44913 -r 85e503ddf65f DOCS/tech/libvo.txt --- a/DOCS/tech/libvo.txt Sun Nov 30 14:45:42 2003 +0000 +++ b/DOCS/tech/libvo.txt Sun Nov 30 16:36:10 2003 +0000 @@ -57,8 +57,12 @@ VOCTRL_GET_EQUALIZER get the current video equalizer values two arguments are provided: item and value - item is a string, the possible values are (currenlty): + item is a string, the possible values are (currently): brightness, contrast, saturation, hue + VOCTRL_ONTOP + Makes the player window stay-on-top. Only supported (currently) + by drivers which use X11, except SDL, as well as directx and + gl2 under Windows. config(): Set up the video system. You get the dimensions and flags. diff -r 753ca0c44913 -r 85e503ddf65f DOCS/tech/slave.txt --- a/DOCS/tech/slave.txt Sun Nov 30 14:45:42 2003 +0000 +++ b/DOCS/tech/slave.txt Sun Nov 30 16:36:10 2003 +0000 @@ -86,6 +86,10 @@ get_vo_fullscreen Print out fullscreen status (1 == fullscreened, 0 == windowed). +vo_ontop + Toggle stay-on-top. Supported by drivers which use X11, except SDL, + as well as directx and gl2 under Windows. + panscan [value2] ??? diff -r 753ca0c44913 -r 85e503ddf65f DOCS/xml/en/ports.xml --- a/DOCS/xml/en/ports.xml Sun Nov 30 14:45:42 2003 +0000 +++ b/DOCS/xml/en/ports.xml Sun Nov 30 16:36:10 2003 +0000 @@ -283,8 +283,7 @@ Best results are achieved with the native DirectX video output driver () and the native Windows waveout audio driver () as OpenGL does not work and SDL is known to - distort sound and image or crash on some systems. You can make the movie - window stay on top with . If the image is + distort sound and image or crash on some systems. If the image is distorted, try turning off hardware acceleration with . Download DirectX 7 header files diff -r 753ca0c44913 -r 85e503ddf65f DOCS/xml/en/usage.xml --- a/DOCS/xml/en/usage.xml Sun Nov 30 14:45:42 2003 +0000 +++ b/DOCS/xml/en/usage.xml Sun Nov 30 16:36:10 2003 +0000 @@ -295,6 +295,11 @@ Switch fullscreen mode. +vo_ontop + + Toggle stay-on-top. Supported by drivers which use X11, except SDL, + as well as directx and gl2 under Windows. + tv_step_channel (int) dir Select next/previous tv channel. diff -r 753ca0c44913 -r 85e503ddf65f Gui/wm/ws.c --- a/Gui/wm/ws.c Sun Nov 30 14:45:42 2003 +0000 +++ b/Gui/wm/ws.c Sun Nov 30 16:36:10 2003 +0000 @@ -779,6 +779,9 @@ vo_x11_decoration( wsDisplay,win->WindowID,decoration ); vo_x11_sizehint( win->X,win->Y,win->Width,win->Height,0 ); vo_x11_setlayer( wsDisplay,win->WindowID,win->isFullScreen ); + +if ((!(win->isFullScreen)) & vo_ontop) vo_x11_setlayer(wsDisplay, win->WindowID,1); + if ( vo_wm_type == 0 && !(vo_fsmode&16) ) XWithdrawWindow( wsDisplay,win->WindowID,wsScreen ); XMoveResizeWindow( wsDisplay,win->WindowID,win->X,win->Y,win->Width,win->Height ); diff -r 753ca0c44913 -r 85e503ddf65f cfg-mplayer.h --- a/cfg-mplayer.h Sun Nov 30 14:45:42 2003 +0000 +++ b/cfg-mplayer.h Sun Nov 30 16:36:10 2003 +0000 @@ -63,6 +63,7 @@ extern int vo_gamma_contrast; extern int vo_gamma_hue; extern char *vo_geometry; +extern int vo_ontop; extern int opt_screen_size_x; extern int opt_screen_size_y; @@ -181,6 +182,8 @@ {"ao", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"fixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL}, {"nofixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL, 0, 0, NULL}, + {"ontop", &vo_ontop, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + {"noontop", &vo_ontop, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"aop", ao_plugin_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"dsp", "Use -ao oss:dsp_path!\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, diff -r 753ca0c44913 -r 85e503ddf65f etc/example.conf --- a/etc/example.conf Sun Nov 30 14:45:42 2003 +0000 +++ b/etc/example.conf Sun Nov 30 16:36:10 2003 +0000 @@ -34,6 +34,10 @@ # monitoraspect=4:3 # standard monitor size, with square pixels # monitoraspect=16:9 # use this for widescreen monitor! non-square pixels +# ontop=yes # Makes the player window stay ontop + # Used by drivers which use X11, except SDL, + # as well as directx and gl2 under Windows + ## ## Specify your preferred default skin here ## (skins are searched in /usr/local/share/mplayer/Skin/yourskin diff -r 753ca0c44913 -r 85e503ddf65f etc/input.conf --- a/etc/input.conf Sun Nov 30 14:45:42 2003 +0000 +++ b/etc/input.conf Sun Nov 30 16:36:10 2003 +0000 @@ -47,6 +47,7 @@ #? sub_step +1 # immediately display next subtitle #? sub_step -1 # previous f vo_fullscreen +T vo_ontop w panscan -0.1 e panscan +0.1 diff -r 753ca0c44913 -r 85e503ddf65f input/input.c --- a/input/input.c Sun Nov 30 14:45:42 2003 +0000 +++ b/input/input.c Sun Nov 30 16:36:10 2003 +0000 @@ -98,6 +98,7 @@ { MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", 1, { { MP_CMD_ARG_INT, {0}}, {-1,{0}} }}, #endif { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {-1,{0}} } }, + { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {-1,{0}} } }, { MP_CMD_SCREENSHOT, "screenshot", 0, { {-1,{0}} } }, { MP_CMD_PANSCAN, "panscan",1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, { MP_CMD_LOADFILE, "loadfile", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } }, @@ -330,6 +331,7 @@ { { JOY_BTN2, 0 }, "volume 1"}, { { JOY_BTN3, 0 }, "volume -1"}, #endif + { { 'T', 0 }, "vo_ontop" }, { { 'f', 0 }, "vo_fullscreen" }, { { 's', 0 }, "screenshot" }, { { 'w', 0 }, "panscan -0.1" }, diff -r 753ca0c44913 -r 85e503ddf65f input/input.h --- a/input/input.h Sun Nov 30 14:45:42 2003 +0000 +++ b/input/input.h Sun Nov 30 16:36:10 2003 +0000 @@ -52,6 +52,7 @@ #define MP_CMD_GET_VO_FULLSCREEN 48 #define MP_CMD_GET_SUB_VISIBILITY 49 #define MP_CMD_SUB_FORCED_ONLY 50 +#define MP_CMD_VO_ONTOP 51 #define MP_CMD_GUI_EVENTS 5000 #define MP_CMD_GUI_LOADFILE 5001 diff -r 753ca0c44913 -r 85e503ddf65f libvo/mga_common.c --- a/libvo/mga_common.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/mga_common.c Sun Nov 30 16:36:10 2003 +0000 @@ -324,6 +324,9 @@ #endif #ifdef VO_XMGA + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_GET_PANSCAN: if ( !inited || !vo_fs ) return VO_FALSE; return VO_TRUE; diff -r 753ca0c44913 -r 85e503ddf65f libvo/video_out.c --- a/libvo/video_out.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/video_out.c Sun Nov 30 16:36:10 2003 +0000 @@ -40,6 +40,7 @@ int vo_fs = 0; int vo_fsmode = 0; float vo_panscan = 0.0f; +int vo_ontop = 0; int vo_pts=0; // for hw decoding float vo_fps=0; // for mp1e rte diff -r 753ca0c44913 -r 85e503ddf65f libvo/video_out.h --- a/libvo/video_out.h Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/video_out.h Sun Nov 30 16:36:10 2003 +0000 @@ -55,6 +55,8 @@ // ... 21 #define VOCTRL_START_SLICE 21 +#define VOCTRL_ONTOP 25 + // Vo can be used by xover #define VOCTRL_XOVERLAY_SUPPORT 22 diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_directx.c --- a/libvo/vo_directx.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_directx.c Sun Nov 30 16:36:10 2003 +0000 @@ -43,7 +43,6 @@ static RECT rd; //rect of our stretched image static RECT rs; //rect of our source image static HWND hWnd=NULL; //handle to the window -static uint32_t ontop=0; //always in foreground static uint32_t image_width, image_height; //image width and height static uint32_t d_image_width, d_image_height; //image width and height zoomed static uint8_t *image=NULL; //image data @@ -60,6 +59,7 @@ extern int vo_doublebuffering; //tribblebuffering extern int vo_fs; extern int vo_directrendering; +extern int vo_ontop; /***************************************************************************** * DirectDraw GUIDs. @@ -527,12 +527,12 @@ dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX; /*if hardware can't do colorkeying set the window on top*/ if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE; - else ontop = 1; + else vo_ontop = 1; } /*calculate window rect with borders*/ if(!vo_fs)AdjustWindowRect(&rd_window,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,0); - if((vo_fs) || (!vo_fs && ontop))hWndafter=HWND_TOPMOST; + if((vo_fs) || (!vo_fs && vo_ontop))hWndafter=HWND_TOPMOST; else hWndafter=HWND_NOTOPMOST; /*display the window*/ @@ -822,11 +822,6 @@ mp_msg(MSGT_VO,MSGL_V,"disabled overlay\n"); nooverlay = 1; } - if(strstr(arg,"ontop")) - { - mp_msg(MSGT_VO,MSGL_V,"window ontop\n"); - ontop = 1; - } } if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw if (Directx_CheckPrimaryPixelformat()!=0)return 1; @@ -1162,6 +1157,18 @@ return query_format(*((uint32_t*)data)); case VOCTRL_DRAW_IMAGE: return put_image(data); + case VOCTRL_ONTOP: + if(vm) + { + mp_msg(MSGT_VO, MSGL_ERR,"ontop has no meaning in exclusive mode\n"); + } + else + { + if(vo_ontop) vo_ontop = 0; + else vo_ontop = 1; + Directx_ManageDisplay(0,0); + } + return VO_TRUE; case VOCTRL_FULLSCREEN: { if(vm) diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_dxr2.c --- a/libvo/vo_dxr2.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_dxr2.c Sun Nov 30 16:36:10 2003 +0000 @@ -854,6 +854,8 @@ break; } + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + // start playing if(ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL) == 0) { playing = 1; @@ -1065,6 +1067,9 @@ flush_dxr2(); ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL); return VO_TRUE; + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: if(!use_ol) return VO_NOTIMPL; diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_dxr3.c --- a/libvo/vo_dxr3.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_dxr3.c Sun Nov 30 16:36:10 2003 +0000 @@ -285,6 +285,9 @@ } return VO_TRUE; #ifdef HAVE_X11 + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: if (dxr3_overlay) { vo_x11_fullscreen(); @@ -668,6 +671,9 @@ overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_OVERLAY); overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_RECTANGLE); } + + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + #endif return 0; diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_gl.c --- a/libvo/vo_gl.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_gl.c Sun Nov 30 16:36:10 2003 +0000 @@ -207,6 +207,8 @@ saver_off(mDisplay); // turning off screen saver + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + return 0; } @@ -314,6 +316,9 @@ case VOCTRL_RESUME: return (int_pause=0); case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data)); + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: vo_x11_fullscreen(); return VO_TRUE; diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_gl2.c --- a/libvo/vo_gl2.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_gl2.c Sun Nov 30 16:36:10 2003 +0000 @@ -1006,6 +1006,7 @@ return -1; #ifndef GL_WIN32 saver_off(mDisplay); + if (vo_ontop) vo_x11_setlayer(mDisplay,vo_window, vo_ontop); #endif return 0; @@ -1172,6 +1173,13 @@ case VOCTRL_RESUME: return (int_pause=0); case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data)); + case VOCTRL_ONTOP: +#ifdef GL_WIN32 + vo_w32_ontop(); +#else + vo_x11_ontop(); +#endif + return VO_TRUE; case VOCTRL_FULLSCREEN: #ifdef GL_WIN32 vo_w32_fullscreen(); diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_x11.c --- a/libvo/vo_x11.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_x11.c Sun Nov 30 16:36:10 2003 +0000 @@ -435,6 +435,9 @@ #endif saver_off(mDisplay); + + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + return 0; } @@ -657,6 +660,9 @@ va_end(ap); return vo_x11_get_equalizer(data, value); } + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: { vo_x11_fullscreen(); diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_xmga.c --- a/libvo/vo_xmga.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_xmga.c Sun Nov 30 16:36:10 2003 +0000 @@ -221,6 +221,8 @@ saver_off(mDisplay); + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + XFlush( mDisplay ); XSync( mDisplay,False ); diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_xover.c --- a/libvo/vo_xover.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_xover.c Sun Nov 30 16:36:10 2003 +0000 @@ -192,6 +192,9 @@ XSetForeground(mDisplay, vo_gc, colorkey); XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, (vo_fs ? drwHeight - 1 : drwHeight)); + + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + /* flush, update drawable */ XFlush(mDisplay); @@ -456,6 +459,9 @@ case VOCTRL_GET_PANSCAN: if ( !vo_config_count || !vo_fs ) return VO_FALSE; return VO_TRUE; + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: vo_x11_fullscreen(); case VOCTRL_SET_PANSCAN: diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_xv.c --- a/libvo/vo_xv.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_xv.c Sun Nov 30 16:36:10 2003 +0000 @@ -346,6 +346,9 @@ mp_msg(MSGT_VO,MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); saver_off(mDisplay); // turning off screen saver + + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + return 0; } @@ -749,6 +752,9 @@ return(vo_xv_get_eq(xv_port, data, value)); } + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; } return VO_NOTIMPL; } diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_xvidix.c --- a/libvo/vo_xvidix.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_xvidix.c Sun Nov 30 16:36:10 2003 +0000 @@ -368,6 +368,8 @@ panscan_calc(); + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + saver_off(mDisplay); /* turning off screen saver */ return(0); @@ -466,6 +468,9 @@ case VOCTRL_GET_PANSCAN: if ( !vo_config_count || !vo_fs ) return VO_FALSE; return VO_TRUE; + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: vo_x11_fullscreen(); case VOCTRL_SET_PANSCAN: diff -r 753ca0c44913 -r 85e503ddf65f libvo/vo_xvmc.c --- a/libvo/vo_xvmc.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/vo_xvmc.c Sun Nov 30 16:36:10 2003 +0000 @@ -792,6 +792,8 @@ mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); + if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); + saver_off(mDisplay); // turning off screen saver //end vo_xv @@ -1408,6 +1410,9 @@ //vo_xv case VOCTRL_GUISUPPORT: return VO_TRUE; + case VOCTRL_ONTOP: + vo_x11_ontop(); + return VO_TRUE; case VOCTRL_FULLSCREEN: vo_x11_fullscreen(); case VOCTRL_GET_PANSCAN: diff -r 753ca0c44913 -r 85e503ddf65f libvo/w32_common.c --- a/libvo/w32_common.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/w32_common.c Sun Nov 30 16:36:10 2003 +0000 @@ -146,18 +146,20 @@ } int createRenderingContext(void) { + HWND layer = HWND_NOTOPMOST; if (wglContext) return 1; + if (vo_fs || vo_ontop) layer = HWND_TOPMOST; if (vo_fs) { changeMode(); - SetWindowPos(vo_hwnd, HWND_TOPMOST, 0, 0, vo_screenwidth, vo_screenheight, SWP_SHOWWINDOW); + SetWindowPos(vo_hwnd, layer, 0, 0, vo_screenwidth, vo_screenheight, SWP_SHOWWINDOW); if (cursor) { ShowCursor(0); cursor = 0; } } else { resetMode(); - SetWindowPos(vo_hwnd, HWND_NOTOPMOST, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW); + SetWindowPos(vo_hwnd, layer, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW); if (!cursor) { ShowCursor(1); cursor = 1; @@ -256,6 +258,16 @@ createRenderingContext(); } +void vo_w32_ontop( void ) +{ + vo_ontop = !vo_ontop; + if (!vo_fs) { + HWND layer = HWND_NOTOPMOST; + if (vo_ontop) layer = HWND_TOPMOST; + SetWindowPos(vo_hwnd, layer, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW); + } +} + void vo_w32_uninit() { mp_msg(MSGT_VO, MSGL_V, "vo: win32: uninit\n"); resetMode(); diff -r 753ca0c44913 -r 85e503ddf65f libvo/w32_common.h --- a/libvo/w32_common.h Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/w32_common.h Sun Nov 30 16:36:10 2003 +0000 @@ -6,6 +6,7 @@ extern HDC vo_hdc; extern int vo_fs; extern int vo_vm; +extern int vo_ontop; extern int vo_init(void); extern void vo_w32_uninit(void); diff -r 753ca0c44913 -r 85e503ddf65f libvo/x11_common.c --- a/libvo/x11_common.c Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/x11_common.c Sun Nov 30 16:36:10 2003 +0000 @@ -1050,6 +1050,9 @@ vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 0 : 1 ); vo_x11_sizehint( x,y,w,h,0 ); vo_x11_setlayer( mDisplay,vo_window,vo_fs ); + + if ((!(vo_fs)) & vo_ontop) vo_x11_setlayer(mDisplay, vo_window,vo_ontop); + if(vo_wm_type==0 && !(vo_fsmode&16)) // XUnmapWindow( mDisplay,vo_window ); // required for MWM XWithdrawWindow(mDisplay,vo_window,mScreen); @@ -1062,6 +1065,13 @@ XFlush( mDisplay ); } +void vo_x11_ontop( void ) +{ + vo_ontop = (!(vo_ontop)); + + vo_x11_setlayer(mDisplay, vo_window, vo_ontop); +} + /* * XScreensaver stuff */ diff -r 753ca0c44913 -r 85e503ddf65f libvo/x11_common.h --- a/libvo/x11_common.h Sun Nov 30 14:45:42 2003 +0000 +++ b/libvo/x11_common.h Sun Nov 30 16:36:10 2003 +0000 @@ -27,6 +27,7 @@ extern int vo_wm_type; extern int vo_fs_type; extern char** vo_fstype_list; +extern int vo_ontop; extern char *mDisplayName; extern Display *mDisplay; @@ -60,6 +61,7 @@ extern void vo_x11_clearwindow_part(Display *mDisplay, Window vo_window, int img_width, int img_height, int use_fs); extern void vo_x11_clearwindow( Display *mDisplay, Window vo_window ); +extern void vo_x11_ontop(); #endif diff -r 753ca0c44913 -r 85e503ddf65f mplayer.c --- a/mplayer.c Sun Nov 30 14:45:42 2003 +0000 +++ b/mplayer.c Sun Nov 30 16:36:10 2003 +0000 @@ -736,6 +736,7 @@ int osd_show_sub_changed = 0; int osd_show_percentage = 0; int osd_show_tv_channel = 25; +int osd_show_ontop = 0; int rtc_fd=-1; @@ -3001,6 +3002,17 @@ #endif if(video_out && vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); } break; + case MP_CMD_VO_ONTOP: + { + if(video_out && vo_config_count) { + video_out->control(VOCTRL_ONTOP, 0); +#ifdef USE_OSD + osd_show_ontop=10; + vo_osd_changed(OSDTYPE_SUBTITLE); +#endif + } + + } break; case MP_CMD_PANSCAN : { if ( !video_out ) break; if ( video_out->control( VOCTRL_GET_PANSCAN,NULL ) == VO_TRUE ) @@ -3551,6 +3563,9 @@ if (osd_show_av_delay) { snprintf(osd_text_tmp, 63, "A-V delay: %d ms", ROUND(audio_delay*1000)); osd_show_av_delay--; + } else if (osd_show_ontop) { + snprintf(osd_text_tmp, 63, "Stay on top: %sabled", vo_ontop?"en":"dis"); + osd_show_ontop--; } else if(osd_level>=2) { int len = demuxer_get_time_length(demuxer); int percentage = -1;