diff options
author | Karsten Schoelzel <kuser@gmx.de> | 2007-09-10 13:38:35 +0200 |
---|---|---|
committer | Karsten Schoelzel <kuser@gmx.de> | 2007-09-10 13:38:35 +0200 |
commit | c8f468802e71ec61ea8c92e829a09a764355949f (patch) | |
tree | 9c7cb8c119d3b90f14e3f0a01bcf6f45771ad7be /StackSet.hs | |
parent | d1b849f806a2dac21827449f84c62da6c857d9bd (diff) | |
download | metatile-c8f468802e71ec61ea8c92e829a09a764355949f.tar metatile-c8f468802e71ec61ea8c92e829a09a764355949f.zip |
Add delete' for use in shift
Rename delete to delete' so we can clear floating status in delete,
thus removing one special handling.
At the moment delete' is only used in shift, but is useful for temporarily
removing a window from the stack.
darcs-hash:20070910113835-eb3a1-39397766e3c6b9428f69cd8c1bd316cdd20cedcb
Diffstat (limited to 'StackSet.hs')
-rw-r--r-- | StackSet.hs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/StackSet.hs b/StackSet.hs index bd7a6fa..48006dd 100644 --- a/StackSet.hs +++ b/StackSet.hs @@ -26,7 +26,7 @@ module StackSet ( focusWindow, tagMember, member, findIndex, -- * Modifying the stackset -- $modifyStackset - insertUp, delete, filter, + insertUp, delete, delete', filter, -- * Setting the master window -- $settingMW swapMaster, swapUp, swapDown, modify, modify', float, sink, -- needed by users @@ -453,9 +453,14 @@ insertUp a s = if member a s then s else insert -- * otherwise, delete doesn't affect the master. -- delete :: (Ord a, Eq s) => a -> StackSet i a s sd -> StackSet i a s sd -delete w s = s { current = removeFromScreen (current s) - , visible = map removeFromScreen (visible s) - , hidden = map removeFromWorkspace (hidden s) } +delete w = sink w . delete' w + +-- only temporarily remove the window from the stack, thereby not destroying special +-- information saved in the Stackset +delete' :: (Ord a, Eq s) => a -> StackSet i a s sd -> StackSet i a s sd +delete' w s = s { current = removeFromScreen (current s) + , visible = map removeFromScreen (visible s) + , hidden = map removeFromWorkspace (hidden s) } where removeFromWorkspace ws = ws { stack = stack ws >>= filter (/=w) } removeFromScreen scr = scr { workspace = removeFromWorkspace (workspace scr) } @@ -495,5 +500,5 @@ swapMaster = modify' $ \c -> case c of shift :: (Ord a, Eq s, Eq i) => i -> StackSet i a s sd -> StackSet i a s sd shift n s | n `tagMember` s && n /= curtag = maybe s go (peek s) | otherwise = s - where go w = view curtag . insertUp w . view n . delete w $ s + where go w = view curtag . insertUp w . view n . delete' w $ s curtag = tag (workspace (current s)) |