summaryrefslogtreecommitdiffstats
path: root/lib/ProcessWorkspaces.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ProcessWorkspaces.hs')
-rw-r--r--lib/ProcessWorkspaces.hs23
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