diff options
Diffstat (limited to 'lib/ProcessWorkspaces.hs')
-rw-r--r-- | lib/ProcessWorkspaces.hs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/ProcessWorkspaces.hs b/lib/ProcessWorkspaces.hs index 74bf6c0..0b14bff 100644 --- a/lib/ProcessWorkspaces.hs +++ b/lib/ProcessWorkspaces.hs @@ -4,6 +4,8 @@ module ProcessWorkspaces ( setProcessWorkspace , getProcessWorkspace , doAutoShift , doIgnoreProcessWorkspace + , shiftGroup + , shiftWinGroup , processWorkspaceStorage , spawnOn , spawnOnCurrent @@ -21,7 +23,6 @@ import System.Posix.Types (ProcessID) import Control.Monad import Data.Maybe -import Data.Monoid import qualified Data.Map as M import Storage @@ -48,6 +49,26 @@ doIgnoreProcessWorkspace = do liftX $ setProcessWorkspace (fromJust mp) Nothing idHook +shiftGroup :: WorkspaceId -> X () +shiftGroup ws = withFocused $ shiftWinGroup ws + +shiftWinGroup :: WorkspaceId -> Window -> X () +shiftWinGroup ws w = do + mp <- runQuery pid w + case mp of + Just p -> do + mws <- getProcessWorkspace p + case mws of + Just pws -> do + setProcessWorkspace p (Just ws) + wins <- withWindowSet $ return . W.allWindows + windows =<< foldM (\f w' -> runQuery pid w' >>= \mp' -> return $ if (mp' == Just p) then W.shiftWin ws w' . f else f) id wins + _ -> + windows $ W.shiftWin ws w + _ -> + windows $ W.shiftWin ws w + + data ProcessWorkspaceStoreData = ProcessWorkspaceStoreData (M.Map ProcessID (Maybe WorkspaceId)) deriving (Typeable, Show, Read) instance StoreData ProcessWorkspaceStoreData |