[Pkg-wmaker-commits] [wmaker] 04/40: wmaker: fix stacking order of dock and fullscreen

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sat Mar 11 13:08:16 UTC 2017


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository wmaker.

commit 6429847494fbcd84e2bab026c3fd9239c7cf8927
Author: Bjørn Mork <bjorn at mork.no>
Date:   Tue Jul 12 23:49:46 2016 +0200

    wmaker: fix stacking order of dock and fullscreen
    
    This reverts the commits:
     311ab6b08ccf ("Raise fullscreened window")
     a504370f3b27 ("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 at asmblr.net>
    Signed-off-by: Bjørn Mork <bjorn at mork.no>
---
 src/WindowMaker.h |  1 +
 src/actions.c     | 16 ++++++++++------
 src/wmspec.c      |  2 +-
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index fe22a79..ce07d82 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 f46e586..e6a91d5 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 9b56f96..0bfc864 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) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmaker.git



More information about the Pkg-wmaker-commits mailing list