# HG changeset patch # User arpi # Date 1041292793 0 # Node ID fd398a0b4b3bf5cf7e721ee80178de3bfca4b4b6 # Parent 7e14d06ab255cdac7c5dd6ff490d45a908bceae5 This time the patch is fixing much more that breaking :-) It includes ugly hack for OpenBox, swaps checking for netwm with layers (and makes fvwm work -> they have also broken _NET_WM_STATE_FULLSCREEN but also supports layers) and changes back fullscreen layer to 10, afterstep doesn't like 12 :-) Tested with: sawfish, metacity, kwin, blackbox, openbox, waimea, windowmaker, afterstep, icewm, mwm, fvwm Filip Kalinski diff -r 7e14d06ab255 -r fd398a0b4b3b libvo/x11_common.c --- a/libvo/x11_common.c Mon Dec 30 23:31:40 2002 +0000 +++ b/libvo/x11_common.c Mon Dec 30 23:59:53 2002 +0000 @@ -48,7 +48,7 @@ #define WIN_LAYER_ONBOTTOM 2 #define WIN_LAYER_NORMAL 4 #define WIN_LAYER_ONTOP 6 -#define WIN_LAYER_ABOVE_DOCK 12 +#define WIN_LAYER_ABOVE_DOCK 10 int ice_layer=WIN_LAYER_ABOVE_DOCK; int stop_xscreensaver=0; @@ -158,6 +158,20 @@ if ( WinID >= 0 ) return vo_wm_Unknown; +// -- supports layers + type=XInternAtom( mDisplay,"_WIN_PROTOCOLS",False ); + if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) + { + mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports layers.\n" ); + for (i = 0; i < nitems; i++) + if (!strcmp( XGetAtomName (mDisplay, args[i]), "_WIN_LAYER")) + { + XFree( args ); + return vo_wm_Layered; + } + XFree( args ); + } + // --- netwm type=XInternAtom( mDisplay,"_NET_SUPPORTED",False ); if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) @@ -167,20 +181,25 @@ net_wm_support |= net_wm_support_state_test (XGetAtomName (mDisplay, args[i])); XFree( args ); if (net_wm_support) + { + // ugly hack for broken OpenBox _NET_WM_STATE_FULLSCREEN support + // (in their implementation it only changes internal state of window, nothing more!!!) + if (vo_wm_NetWM == SUPPORT_FULLSCREEN) + { + type=XInternAtom( mDisplay,"_BLACKBOX_PID",False ); + if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) + { + mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is a broken OpenBox.\n" ); + net_wm_support=0; + XFree( args ); + return vo_wm_Unknown; + } + XFree (args); + } return vo_wm_NetWM; + } } -// -- supports layers - type=XInternAtom( mDisplay,"_WIN_PROTOCOLS",False ); - if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,(unsigned char **) &args ) && nitems > 0 ) - { - mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm supports layers.\n" ); - for (i = 0; i < nitems; i++) - if (!strcmp( XGetAtomName (mDisplay, args[i]), "_WIN_LAYER")); - return vo_wm_Layered; - XFree( args ); - } - if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" ); return wm; }