mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-01 12:41:52 -07:00
X.L.TrackFloating: Fix changing focus on inactive workspaces
When focus changes¹ on an inactive workspace (not `current`, but `visible`), TrackFloating and UseTransientFor would think they should use the remembered focus point as they look at the wrong (`current`) workspace instead of the workspace they're supposed to layout, and so focus seems to be out of their set of windows, when actually it is not. Fix this by looking at the correct workspace. ¹) This isn't entirely straightforward, as there are normally no keybindings or StackSet operations for this, but it's perfectly legal to `W.view` the inactive workspace, change focus, and `W.view` back in a single `windows` action.
This commit is contained in:
@@ -51,7 +51,7 @@ data TrackFloating a = TrackFloating (Maybe Window)
|
||||
instance LayoutModifier TrackFloating Window where
|
||||
modifyLayoutWithUpdate (TrackFloating mw) ws@(W.Workspace{ W.stack = ms }) r
|
||||
= do
|
||||
xCur <- gets (W.peek . windowset)
|
||||
xCur <- gets (W.peek . W.view (W.tag ws) . windowset)
|
||||
let isF = xCur /= (W.focus <$> ms)
|
||||
-- use the remembered focus point when true focus differs from
|
||||
-- what this (sub)layout is given, which happens e.g. when true
|
||||
@@ -75,7 +75,7 @@ data UseTransientFor a = UseTransientFor deriving (Read,Show,Eq)
|
||||
|
||||
instance LayoutModifier UseTransientFor Window where
|
||||
modifyLayout _ ws@(W.Workspace{ W.stack = ms }) r = do
|
||||
m <- gets (W.peek . windowset)
|
||||
m <- gets (W.peek . W.view (W.tag ws) . windowset)
|
||||
d <- asks display
|
||||
parent <- join <$> T.traverse (io . getTransientForHint d) m
|
||||
|
||||
|
Reference in New Issue
Block a user