diff options
author | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-09 04:56:15 +0100 |
---|---|---|
committer | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-09 04:56:15 +0100 |
commit | 2edebdae0e1dcc67bd51a477a03f63a46ae83198 (patch) | |
tree | 63e3594d0e7816b843229b9a1b83257a76428fe4 | |
parent | 9d3c3f8ce3147daac0e97d12d88d5623c8baf3b9 (diff) | |
download | metatile-2edebdae0e1dcc67bd51a477a03f63a46ae83198.tar metatile-2edebdae0e1dcc67bd51a477a03f63a46ae83198.zip |
use new StackSet api
darcs-hash:20070309035615-9c5c1-db8a060d256336a54c76948c219d43ec39847628
-rw-r--r-- | Main.hs | 33 | ||||
-rw-r--r-- | WMonad.hs | 11 |
2 files changed, 24 insertions, 20 deletions
@@ -144,9 +144,12 @@ handle e = trace (eventName e) -- | refresh. Refresh the currently focused window. Resizes to full -- screen and raises the window. refresh :: W () -refresh = whenJust W.peek $ \w -> withScreen $ \(d,sw,sh) -> io $ do - moveResizeWindow d w 0 0 (fromIntegral sw) (fromIntegral sh) -- fullscreen - raiseWindow d w +refresh = do + ws <- gets workspace + whenJust (W.peek ws) $ \w -> + withScreen $ \(d,sw,sh) -> io $ do + moveResizeWindow d w 0 0 (fromIntegral sw) (fromIntegral sh) -- fullscreen + raiseWindow d w -- | hide. Hide a list of windows by moving them offscreen. hide :: Window -> W () @@ -167,8 +170,9 @@ windows f = modifyWorkspace f >> refresh -- | manage. Add a new window to be managed in the current workspace. Bring it into focus. -- If the window is already under management, it is just raised. manage :: Window -> W () -manage w = do withDisplay $ \d -> io $ mapWindow d w - windows $ W.push w +manage w = do + withDisplay $ io . flip mapWindow w + windows $ W.push w -- | unmanage. A window no longer exists, remove it from the window -- list, on whatever workspace it is. @@ -186,25 +190,30 @@ focus = windows . W.rotate -- | Kill the currently focused client kill :: W () -kill = withDisplay $ \d -> whenJust W.peek $ io_ . killClient d +kill = withDisplay $ \d -> do + ws <- gets workspace + whenJust (W.peek ws) $ io_ . killClient d -- | tag. Move a window to a new workspace tag :: Int -> W () tag o = do ws <- gets workspace - when (n /= W.cursor ws) $ - whenJust W.peek $ \w -> do + let m = W.current ws + when (n /= m) $ + whenJust (W.peek ws) $ \w -> do hide w windows $ W.shift n - where n = o -1 + where n = o-1 -- | view. Change the current workspace to workspce at offset 'n-1'. view :: Int -> W () view o = do ws <- gets workspace - when (n /= W.cursor ws) $ - whenJust (flip W.index n) $ \new -> do - mapM_ hide (W.stack ws) + let m = W.current ws + when (n /= m) $ + whenJust (W.index n ws) $ \new -> + whenJust (W.index m ws) $ \old -> do + mapM_ hide old mapM_ reveal new windows $ W.view n where n = o-1 @@ -16,7 +16,7 @@ module WMonad where -import StackSet +import StackSet (StackSet) import Control.Monad.State import System.IO @@ -87,11 +87,6 @@ modifyWorkspace f = do trace (show ws) -- log state changes to stderr -- | Run a side effecting action with the current workspace. Like 'when' but --- for (WorkSpace -> Maybe a). -whenJust :: (WorkSpace -> Maybe a) -> (a -> W ()) -> W () -whenJust mg f = do - ws <- gets workspace - case mg ws of - Nothing -> return () - Just w -> f w +whenJust :: Maybe a -> (a -> W ()) -> W () +whenJust mg f = maybe (return ()) f mg |