diff options
author | David Roundy <droundy@darcs.net> | 2007-08-14 20:35:42 +0200 |
---|---|---|
committer | David Roundy <droundy@darcs.net> | 2007-08-14 20:35:42 +0200 |
commit | 03f5d93ba1d2a0488468186f61b300d3621b3c79 (patch) | |
tree | 5c8b38c40910de0803b2dd35e851dddde114ca62 | |
parent | 4711289c5e074bd5a1070726e8c3bbd84b26a5a6 (diff) | |
download | XMonadContrib-03f5d93ba1d2a0488468186f61b300d3621b3c79.tar.gz XMonadContrib-03f5d93ba1d2a0488468186f61b300d3621b3c79.tar.xz XMonadContrib-03f5d93ba1d2a0488468186f61b300d3621b3c79.zip |
clean up DynamicWorkspaces to handle layouts properly.
darcs-hash:20070814183542-72aca-69bc348ac38c0a2133782d874344255ab1221821.gz
-rw-r--r-- | DynamicWorkspaces.hs | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/DynamicWorkspaces.hs b/DynamicWorkspaces.hs index 51ee58f..ab8dd8f 100644 --- a/DynamicWorkspaces.hs +++ b/DynamicWorkspaces.hs @@ -19,10 +19,10 @@ module XMonadContrib.DynamicWorkspaces ( addWorkspace, removeWorkspace ) where -import Control.Monad.State ( get, gets, modify ) +import Control.Monad.State ( gets, modify ) import XMonad ( X, XState(..), Layout, trace ) -import Operations ( windows ) +import Operations ( windows, view ) import StackSet ( tagMember, StackSet(..), Screen(..), Workspace(..), integrate, differentiate ) import Data.Map ( delete, insert ) @@ -44,10 +44,14 @@ addWorkspace (l:ls) = do s <- gets windowset addWorkspace [] = trace "bad layouts in XMonadContrib.DynamicWorkspaces.addWorkspace\n" removeWorkspace :: X () -removeWorkspace = do XState { windowset = s, layouts = fls } <- get - let w = tag $ workspace $ current s - modify $ \st -> st { layouts = delete w fls } - windows removeWorkspace' +removeWorkspace = do s <- gets windowset + case s of + StackSet { current = Screen { workspace = torem } + , hidden = (w:_) } + -> do view $ tag w + modify $ \st -> st { layouts = delete (tag torem) $ layouts st } + windows (removeWorkspace' (tag torem)) + _ -> return () addWorkspace' :: i -> StackSet i a sid sd -> StackSet i a sid sd addWorkspace' newtag s@(StackSet { current = scr@(Screen { workspace = w }) @@ -55,13 +59,13 @@ addWorkspace' newtag s@(StackSet { current = scr@(Screen { workspace = w }) = s { current = scr { workspace = Workspace newtag Nothing } , hidden = w:ws } -removeWorkspace' :: StackSet i a sid sd -> StackSet i a sid sd -removeWorkspace' s@(StackSet { current = scr@(Screen { workspace = Workspace { stack = st } }) - , hidden = (w:ws) }) - = s { current = scr { workspace = w { stack = meld st (stack w) } } - , hidden = ws } +removeWorkspace' :: (Eq i) => i -> StackSet i a sid sd -> StackSet i a sid sd +removeWorkspace' torem s@(StackSet { current = scr@(Screen { workspace = wc }) + , hidden = (w:ws) }) + | tag w == torem = s { current = scr { workspace = wc { stack = meld (stack w) (stack wc) } } + , hidden = ws } where meld Nothing Nothing = Nothing meld x Nothing = x meld Nothing x = x meld (Just x) (Just y) = differentiate (integrate x ++ integrate y) -removeWorkspace' s = s +removeWorkspace' _ s = s |