summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gui/wm/ws.c10
-rw-r--r--libvo/x11_common.c9
2 files changed, 15 insertions, 4 deletions
diff --git a/Gui/wm/ws.c b/Gui/wm/ws.c
index ff57a1c856..a30eb2d7bd 100644
--- a/Gui/wm/ws.c
+++ b/Gui/wm/ws.c
@@ -776,7 +776,7 @@ void wsSetLayer( Display * wsDisplay, Window win, int layer )
Atom type;
int format;
unsigned long nitems, bytesafter;
- unsigned char * args = NULL;
+ Atom * args = NULL;
if ( wsWMType == wsWMIceWM )
{
@@ -794,15 +794,21 @@ void wsSetLayer( Display * wsDisplay, Window win, int layer )
type=XInternAtom( wsDisplay,"_NET_SUPPORTED",False );
if ( Success == XGetWindowProperty( wsDisplay,wsRootWin,type,0,65536 / sizeof( int32_t ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
{
+ int i;
XEvent e;
+
e.xclient.type=ClientMessage;
e.xclient.message_type=XInternAtom( wsDisplay,"_NET_WM_STATE",False );
e.xclient.display=wsDisplay;
e.xclient.window=win;
e.xclient.format=32;
e.xclient.data.l[0]=layer;
+
e.xclient.data.l[1]=XInternAtom( wsDisplay,"_NET_WM_STATE_STAYS_ON_TOP",False );
-// e.xclient.data.l[1]=XInternAtom( wsDisplay,"_NET_WM_STATE_FULLSCREEN",False );
+ type=XInternAtom( wsDisplay,"_NET_WM_STATE_FULLSCREEN",False );
+ for ( i=0;i < nitems;i++ )
+ if ( args[i] == type ) { e.xclient.data.l[1]=XInternAtom( wsDisplay,"_NET_WM_STATE_FULLSCREEN",False ); break; }
+
e.xclient.data.l[2]=0l;
e.xclient.data.l[3]=0l;
e.xclient.data.l[4]=0l;
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index e13730d6ba..4ee2ec90db 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -635,7 +635,7 @@ void vo_x11_setlayer( int layer )
Atom type;
int format;
unsigned long nitems, bytesafter;
- unsigned char * args = NULL;
+ Atom * args = NULL;
if ( WinID >= 0 ) return;
@@ -658,6 +658,7 @@ void vo_x11_setlayer( int layer )
if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,16384,False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
{
XEvent e;
+ int i;
mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] NET style stay on top ( layer %d ).\n",layer );
memset( &e,0,sizeof( e ) );
@@ -667,8 +668,12 @@ void vo_x11_setlayer( int layer )
e.xclient.window=vo_window;
e.xclient.format=32;
e.xclient.data.l[0]=layer;
+
e.xclient.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_STAYS_ON_TOP",False );
-// e.xclient.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_FULLSCREEN",False );
+ type=XInternAtom( mDisplay,"_NET_WM_STATE_FULLSCREEN",False );
+ for ( i=0;i < nitems;i++ )
+ if ( args[i] == type ) { e.xclient.data.l[1]=XInternAtom( mDisplay,"_NET_WM_STATE_FULLSCREEN",False ); break; }
+
XSendEvent( mDisplay,mRootWin,False,SubstructureRedirectMask,&e );
XFree( args );