From 8f5b332dca2cd3ee59f4719757ff0b5b4b7f6ad9 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Thu, 5 Nov 2020 11:35:48 +0000 Subject: [PATCH] X.H.EwmhDesktops: Turn workspaceListTransform into X action This makes it easier to use transforms that need some state, e.g. XMonad.Actions.WorkspaceNames could provide this. Related: https://github.com/xmonad/xmonad-contrib/pull/105 Related: https://github.com/xmonad/xmonad-contrib/pull/122 Related: f271d59c345e ("X.A.WorkspaceNames: Provide workspaceListTransform for EwmhDesktops") --- XMonad/Actions/WorkspaceNames.hs | 7 +++---- XMonad/Hooks/EwmhDesktops.hs | 16 +++++++++------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/XMonad/Actions/WorkspaceNames.hs b/XMonad/Actions/WorkspaceNames.hs index c43371c28f..2812ddd324 100644 --- a/XMonad/Actions/WorkspaceNames.hs +++ b/XMonad/Actions/WorkspaceNames.hs @@ -188,12 +188,11 @@ workspaceNamePrompt conf job = do contains completions input = return $ filter (Data.List.isInfixOf input) completions --- | Workspace list transformation for --- 'XMonad.Hooks.EwmhDesktops.ewmhDesktopsLogHookCustom' that exposes --- workspace names to pagers and other EWMH-aware clients. +-- | 'XMonad.Hooks.EwmhDesktops.workspaceListTransform' that exposes workspace +-- names to pagers and other EWMH-aware clients. -- -- Usage: --- > logHook = (workspaceNamesListTransform >>= ewmhDesktopsLogHookCustom) <+> … +-- > ewmh' def{ workspaceListTransform = workspaceNamesListTransform } workspaceNamesListTransform :: X ([WindowSpace] -> [WindowSpace]) workspaceNamesListTransform = do names <- getWorkspaceNames diff --git a/XMonad/Hooks/EwmhDesktops.hs b/XMonad/Hooks/EwmhDesktops.hs index 3e7fd1ecde..16d2ca027b 100644 --- a/XMonad/Hooks/EwmhDesktops.hs +++ b/XMonad/Hooks/EwmhDesktops.hs @@ -75,14 +75,14 @@ import XMonad.Util.WindowProperties (getProp32) -- | TODO data EwmhConfig = EwmhConfig - { workspaceListTransform :: [WindowSpace] -> [WindowSpace] + { workspaceListTransform :: X ([WindowSpace] -> [WindowSpace]) , activateHook :: ManageHook , fullscreen :: Bool } instance Default EwmhConfig where def = EwmhConfig - { workspaceListTransform = id + { workspaceListTransform = pure id , activateHook = doFocus , fullscreen = False } @@ -169,7 +169,7 @@ ewmhDesktopsLogHook = ewmhDesktopsLogHook' def -- user-specified function to transform the workspace list (post-sorting) {-# DEPRECATED ewmhDesktopsLogHookCustom "Use ewmhDesktopsLogHook' instead" #-} ewmhDesktopsLogHookCustom :: ([WindowSpace] -> [WindowSpace]) -> X () -ewmhDesktopsLogHookCustom f = ewmhDesktopsLogHook' def{ workspaceListTransform = f } +ewmhDesktopsLogHookCustom f = ewmhDesktopsLogHook' def{ workspaceListTransform = pure f } -- | -- Notifies pagers and window lists, such as those in the gnome-panel @@ -177,7 +177,8 @@ ewmhDesktopsLogHookCustom f = ewmhDesktopsLogHook' def{ workspaceListTransform = ewmhDesktopsLogHook' :: EwmhConfig -> X () ewmhDesktopsLogHook' EwmhConfig{workspaceListTransform} = withWindowSet $ \s -> do sort' <- getSortByIndex - let ws = workspaceListTransform $ sort' $ W.workspaces s + workspaceListTransform' <- workspaceListTransform + let ws = workspaceListTransform' $ sort' $ W.workspaces s -- Set number of workspaces and names thereof let desktopNames = map W.tag ws @@ -190,7 +191,7 @@ ewmhDesktopsLogHook' EwmhConfig{workspaceListTransform} = withWindowSet $ \s -> whenChanged (ClientList clientList) $ setClientList clientList -- Remap the current workspace to handle any renames that f might be doing. - let maybeCurrent' = W.tag <$> listToMaybe (workspaceListTransform [W.workspace $ W.current s]) + let maybeCurrent' = W.tag <$> listToMaybe (workspaceListTransform' [W.workspace $ W.current s]) current = join (flip elemIndex (map W.tag ws) <$> maybeCurrent') whenChanged (CurrentDesktop $ fromMaybe 0 current) $ mapM_ setCurrentDesktop current @@ -215,7 +216,7 @@ ewmhDesktopsEventHook = ewmhDesktopsEventHook' def -- user-specified function to transform the workspace list (post-sorting) {-# DEPRECATED ewmhDesktopsEventHookCustom "Use ewmhDesktopsEventHook' instead" #-} ewmhDesktopsEventHookCustom :: ([WindowSpace] -> [WindowSpace]) -> Event -> X All -ewmhDesktopsEventHookCustom f = ewmhDesktopsEventHook' def{ workspaceListTransform = f } +ewmhDesktopsEventHookCustom f = ewmhDesktopsEventHook' def{ workspaceListTransform = pure f } -- | -- Intercepts messages from pagers and similar applications and reacts on them. @@ -237,7 +238,8 @@ ewmhDesktopsEventHook' EwmhConfig{ workspaceListTransform, activateHook, fullscr e@ClientMessageEvent{ev_window = w, ev_message_type = mt, ev_data = d} = withWindowSet $ \s -> do sort' <- getSortByIndex - let ws = workspaceListTransform $ sort' $ W.workspaces s + workspaceListTransform' <- workspaceListTransform + let ws = workspaceListTransform' $ sort' $ W.workspaces s a_cd <- getAtom "_NET_CURRENT_DESKTOP" a_d <- getAtom "_NET_WM_DESKTOP"