summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gui/wm/ws.c22
-rw-r--r--libvo/x11_common.c21
2 files changed, 34 insertions, 9 deletions
diff --git a/Gui/wm/ws.c b/Gui/wm/ws.c
index 4a58060ac1..e57c8b05ce 100644
--- a/Gui/wm/ws.c
+++ b/Gui/wm/ws.c
@@ -770,24 +770,32 @@ void wsFullScreen( wsTWindow * win )
if ( win->isFullScreen )
{
+ vo_x11_ewmh_fullscreen( _NET_WM_STATE_REMOVE ); // removes fullscreen state if wm supports EWMH
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // shouldn't be needed with EWMH fs
+ {
win->X=win->OldX;
win->Y=win->OldY;
win->Width=win->OldWidth;
win->Height=win->OldHeight;
- win->isFullScreen=False;
decoration=win->Decorations;
+ }
+
#ifdef ENABLE_DPMS
wsScreenSaverOn( wsDisplay );
#endif
- vo_x11_ewmh_fullscreen( _NET_WM_STATE_REMOVE ); // removes fullscreen state if wm supports EWMH
+ win->isFullScreen=False;
}
else
{
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // shouldn't be needed with EWMH fs
+ {
win->OldX=win->X; win->OldY=win->Y;
win->OldWidth=win->Width; win->OldHeight=win->Height;
win->X=wsOrgX; win->Y=wsOrgY;
win->Width=wsMaxX; win->Height=wsMaxY;
+ }
+
win->isFullScreen=True;
#ifdef ENABLE_DPMS
wsScreenSaverOff( wsDisplay );
@@ -796,15 +804,23 @@ void wsFullScreen( wsTWindow * win )
vo_x11_ewmh_fullscreen( _NET_WM_STATE_ADD ); // adds fullscreen state if wm supports EWMH
}
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // shouldn't be needed with EWMH fs
+ {
vo_x11_decoration( wsDisplay,win->WindowID,decoration );
vo_x11_sizehint( win->X,win->Y,win->Width,win->Height,0 );
vo_x11_setlayer( wsDisplay,win->WindowID,win->isFullScreen );
if ((!(win->isFullScreen)) & vo_ontop) vo_x11_setlayer(wsDisplay, win->WindowID,1);
+ XMoveResizeWindow( wsDisplay,win->WindowID,win->X,win->Y,win->Width,win->Height );
+ }
+
if ( vo_wm_type == 0 && !(vo_fsmode&16) )
+ {
XWithdrawWindow( wsDisplay,win->WindowID,wsScreen );
- XMoveResizeWindow( wsDisplay,win->WindowID,win->X,win->Y,win->Width,win->Height );
+ }
+
+
XMapRaised( wsDisplay,win->WindowID );
XRaiseWindow( wsDisplay,win->WindowID );
XFlush( wsDisplay );
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index e6a28df904..0fa2fbf864 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -78,7 +78,7 @@ int mLocalDisplay;
int WinID = -1;
int vo_mouse_autohide = 0;
int vo_wm_type = 0;
-static int vo_fs_type = 0;
+int vo_fs_type = 0; // needs to be accessible for GUI X11 code
static int vo_fs_flip = 0;
char **vo_fstype_list;
@@ -1403,25 +1403,30 @@ void vo_x11_fullscreen(void)
if (vo_fs)
{
// fs->win
- vo_x11_ewmh_fullscreen(_NET_WM_STATE_REMOVE); // removes fullscreen state if wm supports EWMH
-
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // not needed with EWMH fs
+ {
if (vo_dwidth != vo_screenwidth && vo_dheight != vo_screenheight)
return;
- vo_fs = VO_FALSE;
x = vo_old_x;
y = vo_old_y;
w = vo_old_width;
h = vo_old_height;
+ }
+
+ vo_x11_ewmh_fullscreen(_NET_WM_STATE_REMOVE); // removes fullscreen state if wm supports EWMH
+ vo_fs = VO_FALSE;
} else
{
// win->fs
vo_x11_ewmh_fullscreen(_NET_WM_STATE_ADD); // sends fullscreen state to be added if wm supports EWMH
+ vo_fs = VO_TRUE;
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // not needed with EWMH fs
+ {
if (vo_old_width &&
(vo_dwidth == vo_screenwidth && vo_dwidth != vo_old_width) &&
(vo_dheight == vo_screenheight && vo_dheight != vo_old_height))
return;
- vo_fs = VO_TRUE;
vo_old_x = vo_dx;
vo_old_y = vo_dy;
vo_old_width = vo_dwidth;
@@ -1430,7 +1435,7 @@ void vo_x11_fullscreen(void)
y = 0;
w = vo_screenwidth;
h = vo_screenheight;
-
+ }
}
{
long dummy;
@@ -1448,6 +1453,8 @@ void vo_x11_fullscreen(void)
vo_fs_flip = 1;
}
+ if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // not needed with EWMH fs
+ {
vo_x11_decoration(mDisplay, vo_window, (vo_fs) ? 0 : 1);
vo_x11_sizehint(x, y, w, h, 0);
vo_x11_setlayer(mDisplay, vo_window, vo_fs);
@@ -1456,9 +1463,11 @@ void vo_x11_fullscreen(void)
vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
XMoveResizeWindow(mDisplay, vo_window, x, y, w, h);
+ }
#ifdef HAVE_XINERAMA
vo_x11_xinerama_move(mDisplay, vo_window);
#endif
+
XMapRaised(mDisplay, vo_window);
XRaiseWindow(mDisplay, vo_window);
XFlush(mDisplay);