diff options
author | David Roundy <droundy@darcs.net> | 2007-09-26 00:06:59 +0200 |
---|---|---|
committer | David Roundy <droundy@darcs.net> | 2007-09-26 00:06:59 +0200 |
commit | 80297df41556adc546f56a5e10e8871fcb73f410 (patch) | |
tree | 3089f989c5971f4ac23b34f3194025c1b5f4dad8 | |
parent | caf72acbee02a7e9679c74c7af747cbb7d5755a7 (diff) | |
download | XMonadContrib-80297df41556adc546f56a5e10e8871fcb73f410.tar.gz XMonadContrib-80297df41556adc546f56a5e10e8871fcb73f410.tar.xz XMonadContrib-80297df41556adc546f56a5e10e8871fcb73f410.zip |
fix DynamicWorkspaces.
darcs-hash:20070925220659-72aca-af6f6b56fd706bcd2b666a041e496eefb6d34875.gz
-rw-r--r-- | DynamicWorkspaces.hs | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/DynamicWorkspaces.hs b/DynamicWorkspaces.hs index 6cb5ba3..f59a567 100644 --- a/DynamicWorkspaces.hs +++ b/DynamicWorkspaces.hs @@ -19,12 +19,11 @@ module XMonadContrib.DynamicWorkspaces ( addWorkspace, removeWorkspace ) where -import Control.Monad.State ( gets, modify ) +import Control.Monad.State ( gets ) -import XMonad ( X, XState(..), Layout, WorkspaceId, trace ) +import XMonad ( X, XState(..), SomeLayout, WorkspaceId ) import Operations import StackSet hiding (filter, modify, delete) -import Data.Map ( delete, insert ) import Graphics.X11.Xlib ( Window ) -- $usage @@ -38,12 +37,10 @@ import Graphics.X11.Xlib ( Window ) allPossibleTags :: [WorkspaceId] allPossibleTags = map (:"") ['0'..] -addWorkspace :: [Layout Window] -> X () -addWorkspace (l:ls) = do s <- gets windowset - let newtag:_ = filter (not . (`tagMember` s)) allPossibleTags - modify $ \st -> st { layouts = insert newtag (l,ls) $ layouts st } - windows (addWorkspace' newtag) -addWorkspace [] = trace "bad layouts in XMonadContrib.DynamicWorkspaces.addWorkspace\n" +addWorkspace :: SomeLayout Window -> X () +addWorkspace l = do s <- gets windowset + let newtag:_ = filter (not . (`tagMember` s)) allPossibleTags + windows (addWorkspace' newtag l) removeWorkspace :: X () removeWorkspace = do s <- gets windowset @@ -51,17 +48,16 @@ removeWorkspace = do s <- gets windowset StackSet { current = Screen { workspace = torem } , hidden = (w:_) } -> do windows $ 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 }) - , hidden = ws }) - = s { current = scr { workspace = Workspace newtag Nothing } +addWorkspace' :: i -> l -> StackSet i l a sid sd -> StackSet i l a sid sd +addWorkspace' newtag l s@(StackSet { current = scr@(Screen { workspace = w }) + , hidden = ws }) + = s { current = scr { workspace = Workspace newtag l Nothing } , hidden = w:ws } -removeWorkspace' :: (Eq i) => i -> StackSet i a sid sd -> StackSet i a sid sd +removeWorkspace' :: (Eq i) => i -> StackSet i l a sid sd -> StackSet i l 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) } } |