mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 05:48:01 +01:00
wmaker: fix stacking order of dock and fullscreen
This reverts the commits:311ab6b08c("Raise fullscreened window")a504370f3b("Remove WMFullscreenLevel") Removing WMFullscreenLevel had the side effect that a dock or panel having the _NET_WM_WINDOW_TYPE_DOCK type would stack on top of fullscreen windows, obscuring part of them. This is unwanted. No other window should cover a focused fullscreen window:. https://specifications.freedesktop.org/wm-spec/latest/ar01s09.html#STACKINGORDER Simply raising the fullscreen window to the top of the stack of normal windows is not sufficient if there are windows with higher stacking levels present. The separate WMFullscreenLevel is needed. Cc: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Bjørn Mork <bjorn@mork.no>
This commit is contained in:
committed by
Carlos R. Mafra
parent
b7a1528833
commit
6429847494
@@ -59,6 +59,7 @@ enum {
|
||||
WMSubmenuLevel = 15,
|
||||
WMMainMenuLevel = 20,
|
||||
WMStatusLevel = 21,
|
||||
WMFullscreenLevel = 50,
|
||||
WMModalLevel = 100,
|
||||
WMPopUpLevel = 101,
|
||||
WMScreensaverLevel = 1000,
|
||||
|
||||
@@ -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))
|
||||
if (wwin->frame->core->stacking->window_level == WMFullscreenLevel) {
|
||||
if (WFLAGP(wwin, sunken)) {
|
||||
ChangeStackingLevel(wwin->frame->core, WMSunkenLevel);
|
||||
else if (WFLAGP(wwin, floating))
|
||||
} 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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user