summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorfilon <filon@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-09 21:23:54 +0000
committerfilon <filon@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-09 21:23:54 +0000
commit61a46b242b4a17f4ae836f3f56bcedf277aeae88 (patch)
tree81e9f04465443fcfa0fa6c3e2274a0077fd07e81 /libvo
parent108a9cbe343f3b46a636bb541513d5e0e419e3be (diff)
downloadmpv-61a46b242b4a17f4ae836f3f56bcedf277aeae88.tar.bz2
mpv-61a46b242b4a17f4ae836f3f56bcedf277aeae88.tar.xz
Remember window layer befor changing it.
Works on icemw and fvwm, but not on windowmaker (bug in wmaker...). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8867 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/x11_common.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index c9417427d0..34e9ebcbd5 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -47,6 +47,8 @@
#define WIN_LAYER_ABOVE_DOCK 10
int ice_layer=WIN_LAYER_ABOVE_DOCK;
+int orig_layer=WIN_LAYER_NORMAL;
+
int stop_xscreensaver=0;
static int dpms_disabled=0;
@@ -693,6 +695,25 @@ void vo_x11_sizehint( int x, int y, int width, int height, int max )
XSetWMNormalHints( mDisplay,vo_window,&vo_hint );
}
+int vo_x11_get_gnome_layer (Display * mDisplay, Window win)
+{
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long bytesafter;
+ unsigned short *args = NULL;
+
+ if (XGetWindowProperty (mDisplay, win, XA_WIN_LAYER, 0, 16384,
+ False, AnyPropertyType, &type, &format, &nitems,
+ &bytesafter, (unsigned char **) &args) == Success
+ && nitems > 0 && args)
+ {
+ mp_msg (MSGT_VO, MSGL_STATUS, "[x11] original window layer is %d.\n", *args);
+ return *args;
+ }
+ return WIN_LAYER_NORMAL;
+}
+
void vo_x11_setlayer( Display * mDisplay,Window vo_window,int layer )
{
if ( WinID >= 0 ) return;
@@ -704,13 +725,16 @@ void vo_x11_setlayer( Display * mDisplay,Window vo_window,int layer )
{ case vo_wm_Layered:
{
XClientMessageEvent xev;
+
+ if (layer) orig_layer=vo_x11_get_gnome_layer( mDisplay, vo_window );
+
memset(&xev, 0, sizeof(xev));
xev.type = ClientMessage;
xev.display= mDisplay;
xev.window = vo_window;
xev.message_type = XA_WIN_LAYER;
xev.format = 32;
- xev.data.l[0] = layer?ice_layer:WIN_LAYER_NORMAL; // if not fullscreen, stay on layer "Normal"
+ xev.data.l[0] = layer?ice_layer:orig_layer; // if not fullscreen, stay on default layer
xev.data.l[1] = CurrentTime;
mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Layered style stay on top ( layer %d ).\n",xev.data.l[0] );
printf( "[x11] Layered style stay on top ( layer %d ).\n",xev.data.l[0] );