Keep discover-overlay above other windows in XMonad

discover-overlay's windows are override-redirect, so XMonad doesn't
manage them and raising a floating window (e.g. a game) covers them.
Raise them again from the log hook after every change.
This commit is contained in:
Daniele Fucini
2026-10-08 21:37:20 +02:00
parent 70caa8d7ee
commit 1cb2d00cc7
+17 -2
View File
@@ -2,7 +2,7 @@
import Data.Monoid import Data.Monoid
import Graphics.X11.ExtraTypes.XF86 import Graphics.X11.ExtraTypes.XF86
import Control.Monad (liftM2) import Control.Monad (forM_, liftM2, when)
import XMonad import XMonad
import XMonad.Actions.PhysicalScreens import XMonad.Actions.PhysicalScreens
import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.EwmhDesktops
@@ -120,7 +120,8 @@ myConfig =
layoutHook = myLayoutHook, layoutHook = myLayoutHook,
startupHook = myStartupHook, startupHook = myStartupHook,
manageHook = myManageHook, manageHook = myManageHook,
handleEventHook = myHandleEventHook handleEventHook = myHandleEventHook,
logHook = myLogHook
} }
`additionalKeysP` [ ("M-b", sendMessage ToggleStruts), `additionalKeysP` [ ("M-b", sendMessage ToggleStruts),
("M-S-l", spawn "slock"), ("M-S-l", spawn "slock"),
@@ -295,3 +296,17 @@ myHandleEventHook =
<> Hacks.trayerAboveXmobarEventHook <> Hacks.trayerAboveXmobarEventHook
<> Hacks.trayerPaddingXmobarEventHook <> Hacks.trayerPaddingXmobarEventHook
<> Hacks.fixSteamFlicker <> Hacks.fixSteamFlicker
-- Log hook
myLogHook :: X ()
myLogHook = raiseDiscoverOverlay
-- discover-overlay's windows are override-redirect, so xmonad doesn't manage them and
-- raising a floating window (e.g. a game) covers them; put them back on top after every change
raiseDiscoverOverlay :: X ()
raiseDiscoverOverlay = withDisplay $ \d -> do
root <- asks theRoot
(_, _, ws) <- io $ queryTree d root
forM_ ws $ \w -> do
cls <- io $ getClassHint d w
when (resClass cls == "Discover-overlay") $ io $ raiseWindow d w