diff --git a/CHANGES.md b/CHANGES.md index 6cd65e9b6..365af1b64 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -49,6 +49,8 @@ - Added `focusWorkspace` for focusing workspaces on the screen that they belong to. + - Added `doFocus'` hook as an alternative for `doFocus` when using + IndependentScreens. ## 0.18.1 (August 20, 2024) diff --git a/XMonad/Hooks/EwmhDesktops.hs b/XMonad/Hooks/EwmhDesktops.hs index 9da99d583..056c7c438 100644 --- a/XMonad/Hooks/EwmhDesktops.hs +++ b/XMonad/Hooks/EwmhDesktops.hs @@ -238,8 +238,8 @@ setEwmhWorkspaceRename f = XC.modifyDef $ \c -> c{ workspaceRename = f } -- > [ className =? "Google-chrome" <||> className =? "google-chrome" -?> doAskUrgent -- > , pure True -?> doFocus ] -- --- See "XMonad.ManageHook", "XMonad.Hooks.ManageHelpers" and "XMonad.Hooks.Focus" --- for functions that can be useful here. +-- See "XMonad.ManageHook", "XMonad.Hooks.ManageHelpers", "XMonad.Hooks.Focus" and +-- "XMonad.Layout.IndependentScreens" for functions that can be useful here. -- | Set (replace) the hook which is invoked when a client sends a -- @_NET_ACTIVE_WINDOW@ request to activate a window. The default is 'doFocus' diff --git a/XMonad/Layout/IndependentScreens.hs b/XMonad/Layout/IndependentScreens.hs index a84f604cf..62e2de2a0 100644 --- a/XMonad/Layout/IndependentScreens.hs +++ b/XMonad/Layout/IndependentScreens.hs @@ -27,7 +27,7 @@ module XMonad.Layout.IndependentScreens ( whenCurrentOn, countScreens, workspacesOn, - workspaceOnScreen, focusWindow', focusScreen, focusWorkspace, nthWorkspace, withWspOnScreen, + workspaceOnScreen, focusWindow', doFocus', focusScreen, focusWorkspace, nthWorkspace, withWspOnScreen, -- * Converting between virtual and physical workspaces -- $converting marshall, unmarshall, unmarshallS, unmarshallW, @@ -160,6 +160,11 @@ focusWindow' window ws Just tag -> W.focusWindow window $ focusScreen (unmarshallS tag) ws Nothing -> ws +-- | ManageHook to focus a window, switching workspace on the correct Xinerama screen if neccessary. +-- Useful in 'XMonad.Hooks.EwmhDesktops.setActivateHook' when using this module. +doFocus' :: ManageHook +doFocus' = doF . focusWindow' =<< ask + -- | Focus a given screen. focusScreen :: ScreenId -> WindowSet -> WindowSet focusScreen screenId = withWspOnScreen screenId W.view