vanadium/xmonad: check if current before move

This commit is contained in:
Primrose 2025-11-18 19:48:04 +08:00
parent 09d5f8e0c8
commit 587b4a4e20
Signed by: primrose
GPG key ID: 4E887A4CA9714ADA

View file

@ -151,24 +151,24 @@ myManageHook =
myEventHandleHook :: Event -> X All
myEventHandleHook =
-- TODO: is there a way to always open certain sites in new windows in firefox?
-- TODO: stop full screen when move happens
onTitleChange $ composeAll
[ isSpotify --> doShiftAndViewIfMoved multimediaWS
, isYouTube --> doShiftAndViewIfMoved multimediaWS
, isDiscord --> doShiftAndViewIfMoved chatWS
, isWhatsApp --> doShiftAndViewIfMoved chatWS
, isElement --> doShiftAndViewIfMoved chatWS
[ isSpotify --> doShiftAndViewIfCurrent multimediaWS
, isYouTube --> doShiftAndViewIfCurrent multimediaWS
, isDiscord --> doShiftAndViewIfCurrent chatWS
, isWhatsApp --> doShiftAndViewIfCurrent chatWS
, isElement --> doShiftAndViewIfCurrent chatWS
]
-- If the title changes in the background, we don't want to greedy view that workspace.
-- | If the title changes in the background, we don't want to greedy view that workspace.
-- Imagine Spotify playing in the background, a track change would focus that workspace.
-- We prevent this by checking if the window is already there.
doShiftAndViewIfMoved :: WorkspaceId -> Query (Endo WindowSet)
doShiftAndViewIfMoved n = doF . shiftAndViewIfMoved n =<< ask
shiftAndViewIfMoved :: WorkspaceId -> Window -> WindowSet -> WindowSet
shiftAndViewIfMoved n w s = case W.findTag w s of
Just from | n `W.tagMember` s && n /= from -> W.greedyView n $ W.shiftWin n w s
_ -> s
-- We prevent this by checking if the window is in the current workspace
doShiftAndViewIfCurrent :: WorkspaceId -> Query (Endo WindowSet)
doShiftAndViewIfCurrent n = doF . go =<< ask
where go :: Window -> WindowSet -> WindowSet
go w s = case W.findTag w s of
Just from | from == W.currentTag s -> W.greedyView n $ W.shiftWin n w s
_ -> s
myStartupHook :: X ()
myStartupHook = do