summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-11 14:57:41 +0000
committerpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-11 14:57:41 +0000
commite6215bef4078ff772f74e9cad7aa327a5a2b5ef5 (patch)
treee110bbce4ee487a474d7058701fca5aebbd6f2d1 /libvo
parenta7c47b7910df660702cae6350c44da07a3c8b5d5 (diff)
downloadmpv-e6215bef4078ff772f74e9cad7aa327a5a2b5ef5.tar.bz2
mpv-e6215bef4078ff772f74e9cad7aa327a5a2b5ef5.tar.xz
fix some small bug and -rootwin
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6044 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_x11.c69
-rw-r--r--libvo/vo_xmga.c90
-rw-r--r--libvo/vo_xv.c58
-rw-r--r--libvo/vo_xvidix.c115
-rw-r--r--libvo/x11_common.c16
5 files changed, 176 insertions, 172 deletions
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);
-
- XStoreName( mDisplay,vo_window,mTitle );
- XMapWindow( mDisplay,vo_window );
-
- if ( fullscreen&1 ) vo_x11_fullscreen();
-
+ {
+ 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 );
+
+ 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,&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);
-
- 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);
+ 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);
/* 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);
-
-//#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);
+ vo_x11_classhint(mDisplay, vo_window, "xvidix");
+ vo_hidecursor(mDisplay, vo_window);
+ vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 );
- 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 );