[MPlayer-dev-eng] [PATCH] Fullscreen fix for openbox, fvwm and afterstep

Filip Kalinski filon at pld.org.pl
Tue Dec 31 00:27:07 CET 2002


Hi,

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

P.S
Another reason to change option name "-icelayer" to "-fslayer"
are fvwm and afterstep, they also use layers.

-- 
Filip Kalinski <filon at pld.org.pl>
-------------- next part --------------
--- main.old/libvo/x11_common.c	2002-12-30 20:53:02.000000000 +0100
+++ main.work/libvo/x11_common.c	2002-12-31 00:16:46.000000000 +0100
@@ -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;
 }    


More information about the MPlayer-dev-eng mailing list