diff --git a/src/WindowMaker.h b/src/WindowMaker.h index fe22a79c..ce07d82b 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -59,6 +59,7 @@ enum { WMSubmenuLevel = 15, WMMainMenuLevel = 20, WMStatusLevel = 21, + WMFullscreenLevel = 50, WMModalLevel = 100, WMPopUpLevel = 101, WMScreensaverLevel = 1000, diff --git a/src/actions.c b/src/actions.c index f46e5868..e6a91d5b 100644 --- a/src/actions.c +++ b/src/actions.c @@ -727,8 +727,7 @@ void wFullscreenWindow(WWindow *wwin) wWindowConfigureBorders(wwin); - ChangeStackingLevel(wwin->frame->core, WMNormalLevel); - wRaiseFrame(wwin->frame->core); + ChangeStackingLevel(wwin->frame->core, WMFullscreenLevel); wwin->bfs_geometry.x = wwin->frame_x; wwin->bfs_geometry.y = wwin->frame_y; @@ -752,10 +751,15 @@ void wUnfullscreenWindow(WWindow *wwin) wwin->flags.fullscreen = False; - if (WFLAGP(wwin, sunken)) - ChangeStackingLevel(wwin->frame->core, WMSunkenLevel); - else if (WFLAGP(wwin, floating)) - ChangeStackingLevel(wwin->frame->core, WMFloatingLevel); + if (wwin->frame->core->stacking->window_level == WMFullscreenLevel) { + if (WFLAGP(wwin, sunken)) { + ChangeStackingLevel(wwin->frame->core, WMSunkenLevel); + } else if (WFLAGP(wwin, floating)) { + ChangeStackingLevel(wwin->frame->core, WMFloatingLevel); + } else { + ChangeStackingLevel(wwin->frame->core, WMNormalLevel); + } + } wWindowConfigure(wwin, wwin->bfs_geometry.x, wwin->bfs_geometry.y, wwin->bfs_geometry.width, wwin->bfs_geometry.height); diff --git a/src/wmspec.c b/src/wmspec.c index 9b56f96f..0bfc8648 100644 --- a/src/wmspec.c +++ b/src/wmspec.c @@ -1057,7 +1057,7 @@ static int getWindowLayer(WWindow *wwin) if (wwin->transient_for) { WWindow *parent = wWindowFor(wwin->transient_for); if (parent && parent->flags.fullscreen) - layer = WMNormalLevel; + layer = WMFullscreenLevel; } /* //layer = WMPopUpLevel; // this seems a bad idea -Dan */ } else if (wwin->type == net_wm_window_type_dropdown_menu) {