Mercurial > mplayer.hg
changeset 6009:bb1f3552f118
wm detection -- round two
author | pontscho |
---|---|
date | Tue, 07 May 2002 13:31:29 +0000 |
parents | c0b50929b2cd |
children | 3b9e278d23d2 |
files | Gui/wm/ws.c libvo/mga_common.c libvo/vo_xmga.c libvo/vo_xv.c libvo/vo_xvidix.c libvo/x11_common.c |
diffstat | 6 files changed, 133 insertions(+), 63 deletions(-) [+] |
line wrap: on
line diff
--- a/Gui/wm/ws.c Tue May 07 08:39:22 2002 +0000 +++ b/Gui/wm/ws.c Tue May 07 13:31:29 2002 +0000 @@ -150,45 +150,58 @@ unsigned long nitems, bytesafter; unsigned char * args = NULL; - mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is " ); -// --- icewm -// type=XInternAtom( wsDisplay,"_ICEWM_TRAY",False ); -// if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) -// { -// mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"IceWM\n" ); -// XFree( args ); -// return wsWMIceWM; -// } + Window win; + XEvent xev; + int c = 0; + int wm = wsWMUnknown; // --- gnome -// type=XInternAtom( wsDisplay,"_WIN_SUPPORTING_WM_CHECK",False ); -// if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) -// { -// mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"Gnome\n" ); -// XFree( args ); -// return wsWMGnome; -// } - -// --- kde -// type=XInternAtom( wsDisplay,"_KDE_NET_WM_FRAME_STRUT",False ); -//// type=XInternAtom( wsDisplay,"_KDE_NET_USER_TIME",False ); -// if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) -// { -// mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"KDE\n" ); -// XFree( args ); -// return wsWMKDE; -// } + type=XInternAtom( wsDisplay,"_WIN_SUPPORTING_WM_CHECK",False ); + if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) + { + mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is Gnome\n" ); + XFree( args ); + return wsWMGnome; + } // --- net wm type=XInternAtom( wsDisplay,"_NET_SUPPORTED",False ); if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 ) { - mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"NetWM\n" ); + mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"[ws] Detected wm is NetWM\n" ); XFree( args ); return wsWMNetWM; } - - mp_dbg( MSGT_GPLAYER,MSGL_STATUS,"Unknow\n" ); + +// --- other wm + mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Create window for WM detect ...\n" ); + win=XCreateSimpleWindow( wsDisplay,wsRootWin,wsMaxX,wsMaxY,1,1,0,0,0 ); + XSelectInput( wsDisplay,win,PropertyChangeMask | StructureNotifyMask ); + XMapWindow( wsDisplay,win ); + XMoveWindow( wsDisplay,win,wsMaxX,wsMaxY ); + do + { + XCheckWindowEvent( wsDisplay,win,PropertyChangeMask | StructureNotifyMask,&xev ); + + if ( xev.type == PropertyNotify ) + { + char * name = XGetAtomName( wsDisplay,xev.xproperty.atom ); + if ( !name ) break; + + if ( !strncmp( name,"_ICEWM_TRAY",11 ) ) + { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is IceWM.\n" ); wm=wsWMIceWM; break; } + if ( !strncmp( name,"_KDE_",5 ) ) + { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is KDE.\n" ); wm=wsWMKDE; break; } + if ( !strncmp( name,"KWM_WIN_DESKTOP",15 ) ) + { mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Detected wm is WindowMaker style.\n" ); wm=wsWMWMaker; break; } +// fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",win,name,xev.xproperty.atom ); + XFree( name ); + } + } while( c++ < 25 ); + XDestroyWindow( wsDisplay,win ); +#ifdef MP_DEBUG + if ( wm == wsWMUnknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[ws] Unknown wm type...\n" ); +#endif return wsWMUnknown; }
--- a/libvo/mga_common.c Tue May 07 08:39:22 2002 +0000 +++ b/libvo/mga_common.c Tue May 07 13:31:29 2002 +0000 @@ -276,6 +276,10 @@ mga_fullscreen(); #endif return VO_TRUE; +#if defined( VO_XMGA ) && defined( HAVE_NEW_GUI ) + case VOCTRL_GUISUPPORT: + return VO_TRUE; +#endif } return VO_NOTIMPL; }
--- a/libvo/vo_xmga.c Tue May 07 08:39:22 2002 +0000 +++ b/libvo/vo_xmga.c Tue May 07 13:31:29 2002 +0000 @@ -292,8 +292,6 @@ vo_x11_classhint( mDisplay,vo_window,"xmga" ); vo_hidecursor(mDisplay,vo_window); -// if ( vo_fs ) vo_x11_decoration( mDisplay,vo_window,0 ); - XStoreName( mDisplay,vo_window,mTitle ); XMapWindow( mDisplay,vo_window );
--- a/libvo/vo_xv.c Tue May 07 08:39:22 2002 +0000 +++ b/libvo/vo_xv.c Tue May 07 13:31:29 2002 +0000 @@ -437,7 +437,6 @@ ); XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint); XSetWMNormalHints( mDisplay,vo_window,&hint ); -// if ( vo_fs ) vo_x11_decoration( mDisplay,vo_window,0 ); XMapWindow(mDisplay, vo_window); if ( flags&1 ) vo_x11_fullscreen(); #ifdef HAVE_XINERAMA
--- a/libvo/vo_xvidix.c Tue May 07 08:39:22 2002 +0000 +++ b/libvo/vo_xvidix.c Tue May 07 13:31:29 2002 +0000 @@ -33,6 +33,10 @@ #include "vosub_vidix.h" #include "../vidix/vidixlib.h" +#ifdef HAVE_NEW_GUI +#include "../Gui/interface.h" +#endif + LIBVO_EXTERN(xvidix) static vo_info_t vo_info = @@ -228,9 +232,9 @@ window_width = d_width; window_height = d_height; - vo_fs = flags&0x01; - if (vo_fs) - { vo_old_width=d_width; vo_old_height=d_height; } +// vo_fs = flags&0x01; +// if (vo_fs) +// { vo_old_width=d_width; vo_old_height=d_height; } X_already_started++; @@ -254,26 +258,29 @@ } aspect(&d_width, &d_height, A_NOZOOM); + + vo_dwidth=d_width; vo_dheight=d_height; #ifdef HAVE_NEW_GUI -if (vo_window == None) +if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window +else { #endif #ifdef X11_FULLSCREEN - if (vo_fs) /* 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; +// else +// { +// d_width = vo_screenwidth; +// d_height = vo_screenheight; +// } +// window_width = vo_screenwidth; +// window_height = vo_screenheight; } #endif dwidth = d_width; @@ -310,10 +317,10 @@ vo_x11_classhint(mDisplay, vo_window, "xvidix"); vo_hidecursor(mDisplay, vo_window); -#ifdef X11_FULLSCREEN - if (vo_fs) /* fullscreen */ - vo_x11_decoration(mDisplay, vo_window, 0); -#endif +//#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; @@ -327,13 +334,16 @@ /* Map window. */ XMapWindow(mDisplay, vo_window); + + if ( flags&1 ) vo_x11_fullscreen(); + #ifdef HAVE_XINERAMA vo_x11_xinerama_move(mDisplay, vo_window); #endif vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV); - XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask ); +// XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask ); #ifdef HAVE_NEW_GUI } #endif
--- a/libvo/x11_common.c Tue May 07 08:39:22 2002 +0000 +++ b/libvo/x11_common.c Tue May 07 13:31:29 2002 +0000 @@ -174,6 +174,59 @@ #undef MSGLEN } +int vo_wm_detect( void ) +{ + Atom type; + Window win; + XEvent xev; + int c = 0; + int wm = vo_wm_Unknown; + int format; + unsigned long nitems, bytesafter; + unsigned char * args = NULL; +#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" ); + XFree( args ); + return vo_wm_NetWM; + } +#endif +// --- other wm + mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Create window for WM detect ...\n" ); + win=XCreateSimpleWindow( mDisplay,mRootWin,vo_screenwidth,vo_screenheight,1,1,0,0,0 ); + XSelectInput( mDisplay,win,PropertyChangeMask | StructureNotifyMask ); + XMapWindow( mDisplay,win ); + XMoveWindow( mDisplay,win,vo_screenwidth,vo_screenheight ); + do + { + XCheckWindowEvent( mDisplay,win,PropertyChangeMask | StructureNotifyMask,&xev ); + + if ( xev.type == PropertyNotify ) + { + char * name = XGetAtomName( mDisplay,xev.xproperty.atom ); + if ( !name ) break; + + if ( !strncmp( name,"_ICEWM_TRAY",11 ) ) + { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is IceWM.\n" ); wm=vo_wm_IceWM; break; } + if ( !strncmp( name,"_KDE_",5 ) ) + { mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is KDE.\n" ); wm=vo_wm_KDE; break; } + if ( !strncmp( name,"KWM_WIN_DESKTOP",15 ) ) + { 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 ); + } + } while( c++ < 25 ); + XDestroyWindow( mDisplay,win ); +#ifdef MP_DEBUG + if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" ); +#endif + return wm; +} + int vo_init( void ) { // int mScreen; @@ -297,19 +350,7 @@ depth, vo_depthonscreen, dispName,mLocalDisplay?"local":"remote"); - { - Atom type; - int format; - unsigned long nitems, bytesafter; - unsigned char * args = NULL; - 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" ); - XFree( args ); - vo_wm_type=vo_wm_NetWM; - } - } + vo_wm_type=vo_wm_detect(); return 1; } @@ -564,6 +605,7 @@ mplayer_put_key(MOUSE_BTN0+Event.xbutton.button-1); break; #endif +#if 1 case PropertyNotify: { char * name = XGetAtomName( mydisplay,Event.xproperty.atom ); @@ -590,9 +632,9 @@ XFree( name ); } break; +#endif } } - return ret; } @@ -675,7 +717,11 @@ switch ( vo_wm_type ) { +// case vo_wm_WMakerStyle: +// vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 1 : 0 ); + break; case vo_wm_Unknown: + vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 1 : 0 ); XUnmapWindow( mDisplay,vo_window ); break; case vo_wm_IceWM: