diff --git a/Gui/mplayer/mw.h b/Gui/mplayer/mw.h index fbd4ea29bf..b78fb30685 100644 --- a/Gui/mplayer/mw.h +++ b/Gui/mplayer/mw.h @@ -147,6 +147,8 @@ void mplMainDraw( wsParamDisplay ) txSample * image = NULL; int i; + if ( appMPlayer.mainWindow.State == wsWindowClosed ) exit_player( MSGTR_Exit_quit ); + if ( appMPlayer.mainWindow.Visible == wsWindowNotVisible || !mainVisible ) return; // !appMPlayer.mainWindow.Mapped ) return; diff --git a/libvo/vo_x11.c b/libvo/vo_x11.c index 7f89d21448..ba5a79eae3 100644 --- a/libvo/vo_x11.c +++ b/libvo/vo_x11.c @@ -249,7 +249,6 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t static uint32_t vm_height; #endif - vo_mouse_autohide=1; old_vo_dwidth=-1; old_vo_dheight=-1; @@ -261,6 +260,7 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t if(in_format==IMGFMT_I420 || in_format==IMGFMT_IYUV) in_format=IMGFMT_YV12; srcW= width; srcH= height; + vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; vo_dwidth=width; vo_dheight=height; if( flags&0x03 ) fullscreen = 1; @@ -290,15 +290,10 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t else #endif { - hint.x=0; - hint.y=0; -// if(zoomFlag){ -// hint.width=d_width; -// hint.height=d_height; -// }else{ - hint.width=width; - hint.height=height; -// } + hint.x=vo_dx; + hint.y=vo_dy; + hint.width=width; + hint.height=height; #ifdef HAVE_XF86VM if ( vm ) @@ -313,13 +308,7 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t hint.width=modeline_width; hint.height=modeline_height; } -// else #endif -// if ( fullscreen ) -// { -// hint.width=vo_screenwidth; -// hint.height=vo_screenheight; -// } hint.flags=PPosition | PSize; bg=WhitePixel( mDisplay,mScreen ); @@ -344,24 +333,36 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t #endif if ( WinID>=0 ){ - vo_window = WinID ? ((Window)WinID) : RootWindow( mDisplay,mScreen ); - XUnmapWindow( mDisplay,vo_window ); - XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); + vo_window = WinID ? ((Window)WinID) : mRootWin; + if ( WinID ) + { + XUnmapWindow( mDisplay,vo_window ); + XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); + XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); + } else XSelectInput( mDisplay,vo_window,ExposureMask ); } else - vo_window=XCreateWindow( mDisplay,RootWindow( mDisplay,mScreen ), + { + vo_window=XCreateWindow( mDisplay,mRootWin, hint.x,hint.y, hint.width,hint.height, xswa.border_pixel,depth,CopyFromParent,vinfo.visual,xswamask,&xswa ); - vo_x11_classhint( mDisplay,vo_window,"x11" ); - vo_hidecursor(mDisplay,vo_window); - XSelectInput( mDisplay,vo_window,StructureNotifyMask ); - XSetStandardProperties( mDisplay,vo_window,title,title,None,NULL,0,&hint ); - XMapWindow( mDisplay,vo_window ); - if(WinID!=0) - do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window ); - XSelectInput( mDisplay,vo_window,NoEventMask ); + vo_x11_classhint( mDisplay,vo_window,"x11" ); + vo_hidecursor(mDisplay,vo_window); + XSelectInput( mDisplay,vo_window,StructureNotifyMask ); + XSetStandardProperties( mDisplay,vo_window,title,title,None,NULL,0,&hint ); + XMapWindow( mDisplay,vo_window ); + if(WinID!=0) + do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window ); + XSelectInput( mDisplay,vo_window,NoEventMask ); + + if ( fullscreen ) vo_x11_fullscreen(); +#ifdef HAVE_XINERAMA + vo_x11_xinerama_move(mDisplay,vo_window); +#endif + } + XFlush( mDisplay ); XSync( mDisplay,False ); @@ -381,13 +382,11 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t #endif } - if ( fullscreen ) vo_x11_fullscreen(); -#ifdef HAVE_XINERAMA - vo_x11_xinerama_move(mDisplay,vo_window); -#endif - - vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv ); - getMyXImage(); + vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv ); + getMyXImage(); + + if ( !WinID ) + { vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; } switch ((bpp=myximage->bits_per_pixel)){ case 24: draw_alpha_fnc=draw_alpha_24; diff --git a/libvo/vo_xmga.c b/libvo/vo_xmga.c index 476fffd7ab..246a8adccb 100644 --- a/libvo/vo_xmga.c +++ b/libvo/vo_xmga.c @@ -79,9 +79,6 @@ static uint32_t mDepth, bpp, mode; static XWindowAttributes attribs; static uint32_t X_already_started=0; -static uint32_t wndX; -static uint32_t wndY; - static uint32_t fgColor; static uint32_t mvHeight; @@ -108,11 +105,15 @@ static void mDrawColorKey( void ) static void set_window(){ - XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth ); - fprintf( stderr,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight ); - drwX=0; drwY=0; - XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot ); - fprintf( stderr,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); + if ( WinID ) + { + XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth ); + fprintf( stderr,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight ); + drwX=0; drwY=0; + XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot ); + fprintf( stderr,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); + } + else { drwX=drwcX=vo_dx; drwY=drwcY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; } aspect(&dwidth,&dheight,A_NOZOOM); if ( vo_fs ) @@ -166,9 +167,8 @@ static void check_events(void) int e=vo_x11_check_events(mDisplay); if ( !(e&VO_EVENT_RESIZE) && !(e&VO_EVENT_EXPOSE) ) return; set_window(); - if(e&VO_EVENT_EXPOSE) mDrawColorKey(); - if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) - printf( "Error in mga_vid_config ioctl (wrong mga_vid.o version?)" ); + mDrawColorKey(); + if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) printf( "Error in mga_vid_config ioctl (wrong mga_vid.o version?)" ); } static void draw_osd(void) @@ -188,7 +188,7 @@ static void flip_page(void){ static int inited=0; -static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format,const vo_tune_info_t* info) +static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format,const vo_tune_info_t* info) { char * mTitle=(title == NULL) ? "XMGA render" : title; XVisualInfo vinfo; @@ -230,7 +230,7 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 mvWidth=width; mvHeight=height; - wndX=0; wndY=0; + vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; vo_dwidth=d_width; vo_dheight=d_height; vo_mouse_autohide=1; @@ -254,46 +254,58 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 #endif { #ifdef X11_FULLSCREEN - if ( fullscreen&1 ) aspect(&dwidth,&dheight,A_ZOOM); + if ( flags&1 ) aspect(&dwidth,&dheight,A_ZOOM); #endif - XGetWindowAttributes( mDisplay,DefaultRootWindow( mDisplay ),&attribs ); + XGetWindowAttributes( mDisplay,mRootWin,&attribs ); mDepth=attribs.depth; if ( mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32 ) mDepth=24; XMatchVisualInfo( mDisplay,mScreen,mDepth,TrueColor,&vinfo ); - xWAttribs.colormap=XCreateColormap( mDisplay,RootWindow( mDisplay,mScreen ),vinfo.visual,AllocNone ); + xWAttribs.colormap=XCreateColormap( mDisplay,mRootWin,vinfo.visual,AllocNone ); xWAttribs.background_pixel=0; xWAttribs.border_pixel=0; - xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask | - ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)); + xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask | + ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask | PropertyChangeMask)); xswamask=CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; if ( WinID>=0 ){ - vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay,mScreen); - XUnmapWindow( mDisplay,vo_window ); - XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xWAttribs); + + vo_window = WinID ? ((Window)WinID) : mRootWin; + if ( WinID ) + { + XUnmapWindow( mDisplay,vo_window ); + XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xWAttribs); + XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); + } else XSelectInput( mDisplay,vo_window,ExposureMask ); + } else - vo_window=XCreateWindow( mDisplay,mRootWin, - wndX,wndY, - vo_dwidth,vo_dheight, - xWAttribs.border_pixel, - mDepth, - InputOutput, - vinfo.visual,xswamask,&xWAttribs ); - vo_x11_classhint( mDisplay,vo_window,"xmga" ); - vo_hidecursor(mDisplay,vo_window); + { + vo_window=XCreateWindow( mDisplay,mRootWin, + vo_dx,vo_dy, + vo_dwidth,vo_dheight, + xWAttribs.border_pixel, + mDepth, + InputOutput, + vinfo.visual,xswamask,&xWAttribs ); + + vo_x11_classhint( mDisplay,vo_window,"xmga" ); + vo_hidecursor(mDisplay,vo_window); + vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 ); - XStoreName( mDisplay,vo_window,mTitle ); - XMapWindow( mDisplay,vo_window ); + XStoreName( mDisplay,vo_window,mTitle ); + XMapWindow( mDisplay,vo_window ); + + if ( flags&1 ) vo_x11_fullscreen(); - if ( fullscreen&1 ) vo_x11_fullscreen(); - #ifdef HAVE_XINERAMA - vo_x11_xinerama_move(mDisplay,vo_window); + vo_x11_xinerama_move(mDisplay,vo_window); #endif - vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV ); + } + vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV ); } + if ( ( flags&1 )&&( !WinID ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; } + set_window(); mga_vid_config.src_width=width; @@ -306,8 +318,6 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 if(mga_init()) return -1; - set_window(); - XFlush( mDisplay ); XSync( mDisplay,False ); diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c index b5af2836db..1549a4831b 100644 --- a/libvo/vo_xv.c +++ b/libvo/vo_xv.c @@ -337,10 +337,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 vo_mouse_autohide=1; + vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; vo_dwidth=d_width; vo_dheight=d_height; -// vo_fs=flags&1; -// if ( vo_fs ) -// { vo_old_width=d_width; vo_old_height=d_height; } #ifdef HAVE_XF86VM if( flags&0x02 ) vm = 1; @@ -366,8 +364,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 else #endif { - hint.x = 0; - hint.y = 0; + hint.x = vo_dx; + hint.y = vo_dy; hint.width = d_width; hint.height = d_height; aspect(&d_width,&d_height,A_NOZOOM); @@ -388,8 +386,6 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 #endif if ( vo_fs ) { -// hint.width=vo_screenwidth; -// hint.height=vo_screenheight; #ifdef X11_FULLSCREEN /* this code replaces X11_FULLSCREEN hack in mplayer.c * aspect() is available through aspect.h for all vos. @@ -416,35 +412,39 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 xswamask = CWBackPixel | CWBorderPixel; if ( WinID>=0 ){ - vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay,mScreen); - XUnmapWindow( mDisplay,vo_window ); - XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); + vo_window = WinID ? ((Window)WinID) : mRootWin; + if ( WinID ) + { + XUnmapWindow( mDisplay,vo_window ); + XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); + XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); + } else { drwX=vo_dx; drwY=vo_dy; } } else + { + vo_window = XCreateWindow(mDisplay, mRootWin, + hint.x, hint.y, hint.width, hint.height, + 0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa); - vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay,mScreen), - hint.x, hint.y, hint.width, hint.height, - 0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa); + vo_x11_classhint( mDisplay,vo_window,"xv" ); + vo_hidecursor(mDisplay,vo_window); - vo_x11_classhint( mDisplay,vo_window,"xv" ); - vo_hidecursor(mDisplay,vo_window); - - XSelectInput(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask | + XSelectInput(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask | ((WinID==0) ? 0 : (PointerMotionMask #ifdef HAVE_NEW_INPUT | ButtonPressMask | ButtonReleaseMask #endif - )) - ); - XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint); - XSetWMNormalHints( mDisplay,vo_window,&hint ); - XMapWindow(mDisplay, vo_window); - if ( flags&1 ) vo_x11_fullscreen(); + ))); + XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint); + XSetWMNormalHints( mDisplay,vo_window,&hint ); + XMapWindow(mDisplay, vo_window); + if ( flags&1 ) vo_x11_fullscreen(); #ifdef HAVE_XINERAMA - vo_x11_xinerama_move(mDisplay,vo_window); + vo_x11_xinerama_move(mDisplay,vo_window); #endif - vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv); - XFlush(mDisplay); - XSync(mDisplay, False); + } + vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv); + XFlush(mDisplay); + XSync(mDisplay, False); #ifdef HAVE_XF86VM if ( vm ) { @@ -477,7 +477,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 set_gamma_correction(); aspect(&vo_dwidth,&vo_dheight,A_NOZOOM); - if ( vo_fs ) + if ( ( flags&1 )&&( !WinID ) ) { aspect(&vo_dwidth,&vo_dheight,A_ZOOM); drwX=( vo_screenwidth - (vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth) ) / 2; @@ -486,7 +486,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32 vo_dheight=(vo_dheight > vo_screenheight?vo_screenheight:vo_dheight); mp_msg(MSGT_VO,MSGL_V, "[xv-fs] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); } - + 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 diff --git a/libvo/vo_xvidix.c b/libvo/vo_xvidix.c index b08915ae2e..0b24e0c417 100644 --- a/libvo/vo_xvidix.c +++ b/libvo/vo_xvidix.c @@ -69,7 +69,6 @@ static uint32_t image_format; static uint32_t image_depth; /* Window parameters */ -static uint32_t window_x, window_y; static uint32_t window_width, window_height; /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ @@ -79,26 +78,35 @@ static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, static void set_window(int force_update,const vo_tune_info_t *info) { - XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, - &drwHeight, &drwBorderWidth, &drwDepth); - drwX = drwY = 0; - XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, - &drwcX, &drwcY, &mRoot); + if ( WinID ) + { + XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, + &drwHeight, &drwBorderWidth, &drwDepth); + drwX = drwY = 0; + XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, + &drwcX, &drwcY, &mRoot); - aspect(&dwidth,&dheight,A_NOZOOM); - if (!vo_fs) - mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", - drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); + aspect(&dwidth,&dheight,A_NOZOOM); + if (!vo_fs) + mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", + drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); /* following stuff copied from vo_xmga.c */ + } + else + { + aspect(&dwidth,&dheight,A_NOZOOM); + drwcX=drwX=vo_dx; drwcY=drwY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; + } + #if X11_FULLSCREEN if (vo_fs) { aspect(&dwidth,&dheight,A_ZOOM); drwX = (vo_screenwidth - (dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; - drwcX += drwX; + drwcX = drwX; drwY = (vo_screenheight - (dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; - drwcY += drwY; + drwcY = drwY; drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth); drwHeight = (dheight > vo_screenheight ? vo_screenheight : dheight); mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", @@ -129,17 +137,17 @@ static void set_window(int force_update,const vo_tune_info_t *info) #endif /* set new values in VIDIX */ - if (force_update || (window_x != drwcX) || (window_y != drwcY) || + if (force_update || (vo_dx != drwcX) || (vo_dy != drwcY) || (window_width != drwWidth) || (window_height != drwHeight)) { - window_x = drwcX; - window_y = drwcY; + vo_dx = drwcX; + vo_dy = drwcY; window_width = drwWidth; window_height = drwHeight; /* FIXME: implement runtime resize/move if possible, this way is very ugly! */ vidix_stop(); - if (vidix_init(image_width, image_height, window_x, window_y, + if (vidix_init(image_width, image_height, vo_dx, vo_dy, window_width, window_height, image_format, vo_depthonscreen, vo_screenwidth, vo_screenheight,info) != 0) { @@ -153,7 +161,7 @@ static void set_window(int force_update,const vo_tune_info_t *info) } mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", - window_x, window_y, window_width, window_height); + vo_dx, vo_dy, window_width, window_height); /* mDrawColorKey: */ @@ -189,6 +197,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, image_height = height; image_width = width; image_format = format; + vo_mouse_autohide=1; if (IMGFMT_IS_RGB(format)) { @@ -225,8 +234,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, aspect_save_prescale(d_width, d_height); aspect_save_screenres(vo_screenwidth, vo_screenheight); - window_x = 0; - window_y = 0; + vo_dx = 0; + vo_dy = 0; window_width = d_width; window_height = d_height; @@ -254,7 +263,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, } aspect(&d_width, &d_height, A_NOZOOM); - + + vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; vo_dwidth=d_width; vo_dheight=d_height; #ifdef HAVE_NEW_GUI @@ -264,20 +274,7 @@ else #endif #ifdef X11_FULLSCREEN - if ( flags&1 ) /* fullscreen */ - { - if (flags & 0x04) - { - aspect(&d_width, &d_height, A_ZOOM); - } -// else -// { -// d_width = vo_screenwidth; -// d_height = vo_screenheight; -// } -// window_width = vo_screenwidth; -// window_height = vo_screenheight; - } + if ( ( flags&1 )||(flags & 0x04) ) aspect(&d_width, &d_height, A_ZOOM); #endif dwidth = d_width; dheight = d_height; @@ -295,57 +292,49 @@ else xswa.border_pixel = 0; xswa.colormap = XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), vinfo.visual, AllocNone); - xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | + xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask | ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)); xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; if (WinID >= 0) { vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay, mScreen); - XUnmapWindow(mDisplay, vo_window); - XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); + if ( WinID ) + { + XUnmapWindow(mDisplay, vo_window); + XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); + XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); + } else XSelectInput( mDisplay,vo_window,ExposureMask ); } else - vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen), - window_x, window_y, window_width, window_height, xswa.border_pixel, + { + vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen), + vo_dx, vo_dy, window_width, window_height, xswa.border_pixel, vinfo.depth, InputOutput, vinfo.visual, xswamask, &xswa); - vo_x11_classhint(mDisplay, vo_window, "xvidix"); - vo_hidecursor(mDisplay, vo_window); + vo_x11_classhint(mDisplay, vo_window, "xvidix"); + vo_hidecursor(mDisplay, vo_window); + vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 ); -//#ifdef X11_FULLSCREEN -// if (vo_fs && vo_wm_type == 0) /* fullscreen */ -// vo_x11_decoration(mDisplay, vo_window, 0); -//#endif - - XGetNormalHints(mDisplay, vo_window, &hint); - hint.x = window_x; - hint.y = window_y; - hint.base_width = hint.width = window_width; - hint.base_height = hint.height = window_height; - hint.flags = USPosition | USSize; - XSetNormalHints(mDisplay, vo_window, &hint); - - XStoreName(mDisplay, vo_window, title); - /* Map window. */ - - XMapWindow(mDisplay, vo_window); + XStoreName(mDisplay, vo_window, title); + XMapWindow(mDisplay, vo_window); - if ( flags&1 ) vo_x11_fullscreen(); + if ( flags&1 ) vo_x11_fullscreen(); #ifdef HAVE_XINERAMA - vo_x11_xinerama_move(mDisplay, vo_window); + vo_x11_xinerama_move(mDisplay, vo_window); #endif + } vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV); - -// XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask ); #ifdef HAVE_NEW_GUI } #endif mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] image properties: %dx%d depth: %d\n", image_width, image_height, image_depth); + + if ( ( !WinID )&&( flags&1 ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; } if (vidix_grkey_support()) { diff --git a/libvo/x11_common.c b/libvo/x11_common.c index b31d7cd04a..ddb47f9a61 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -185,12 +185,16 @@ int vo_wm_detect( void ) int format; unsigned long nitems, bytesafter; unsigned char * args = NULL; + char * name = NULL; + + if ( WinID >= 0 ) return vo_wm_Unknown; + #if 1 // --- netwm type=XInternAtom( mDisplay,"_NET_SUPPORTED",False ); if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) { - mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is NetWM.\n" ); + mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is of class NetWM.\n" ); XFree( args ); return vo_wm_NetWM; } @@ -207,7 +211,7 @@ int vo_wm_detect( void ) if ( xev.type == PropertyNotify ) { - char * name = XGetAtomName( mDisplay,xev.xproperty.atom ); + name=XGetAtomName( mDisplay,xev.xproperty.atom ); if ( !name ) break; if ( !strncmp( name,"_ICEWM_TRAY",11 ) ) @@ -218,9 +222,10 @@ int vo_wm_detect( void ) { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is WindowMaker style.\n" ); wm=vo_wm_WMakerStyle; break; } // fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",win,name,xev.xproperty.atom ); - XFree( name ); + XFree( name ); name=NULL; } } while( c++ < 25 ); + if ( name ) XFree( name ); XDestroyWindow( mDisplay,win ); #ifdef MP_DEBUG if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" ); @@ -677,6 +682,7 @@ void vo_x11_setlayer( int layer ) if ( vo_wm_type == vo_wm_IceWM ) { + mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] IceWM style stay on top ( layer %d ).\n",layer ); switch ( layer ) { case -1: layer=2; break; // WinLayerBelow @@ -684,7 +690,7 @@ void vo_x11_setlayer( int layer ) case 1: layer=8; break; // WinLayerOnTop } XChangeProperty( mDisplay,vo_window, - XInternAtom( mDisplay,"_WIN_LAYER",False ),XA_CARDINAL,32,PropModeReplace,(unsigned char *)&layer,1 ); + XInternAtom( mDisplay,"_WIN_LAYER",False ),XA_CARDINAL,32,PropModeReplace,(unsigned char *)&layer,1 ); return; } @@ -750,8 +756,8 @@ void vo_x11_fullscreen( void ) { vo_fs=VO_FALSE; x=vo_old_x; y=vo_old_y; w=vo_old_width; h=vo_old_height; } else { vo_fs=VO_TRUE; vo_old_x=vo_dx; vo_old_y=vo_dy; vo_old_width=vo_dwidth; vo_old_height=vo_dheight; } - vo_x11_sizehint( x,y,w,h,0 ); vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 0 : 1 ); + vo_x11_sizehint( x,y,w,h,0 ); vo_x11_setlayer( vo_fs ); XMoveResizeWindow( mDisplay,vo_window,x,y,w,h ); XMapRaised( mDisplay,vo_window );