From 7c37e6463f860d01cfb0c12b91e5f2ab1c7589c5 Mon Sep 17 00:00:00 2001
From: Jason Creighton <jcreigh@gmail.com>
Date: Thu, 10 May 2007 03:20:59 +0200
Subject: make rotView only consider non-visible workspaces (Xinerama)

darcs-hash:20070510012059-b9aa7-ac8a3d1bbca392324b1308315f5293470cc79b54.gz
---
 RotView.hs | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/RotView.hs b/RotView.hs
index 9d53cc4..7505bb2 100644
--- a/RotView.hs
+++ b/RotView.hs
@@ -12,21 +12,24 @@ import qualified Data.Map as M
 import Control.Monad.State
 
 import Operations ( view )
-import XMonad ( X, WorkspaceId, workspace )
-import StackSet ( StackSet, focus )
-import qualified StackSet as W ( current )
+import XMonad ( X, WorkspaceId, workspace, whenJust )
+import StackSet ( StackSet )
+import Data.Maybe ( listToMaybe )
+import qualified StackSet as W ( stacks, current, visibleWorkspaces, index )
 
 rotView :: Bool -> X ()
 rotView b = do ws <- gets workspace
                let m = W.current ws
+                   vis = W.visibleWorkspaces ws
                    allws = if b then allWorkspaces ws else reverse $ allWorkspaces ws
-                   n1 = safehead allws m
-                   rot (f:fs) | f == m = safehead fs n1
-                              | otherwise = rot fs
-                   rot [] = n1
-                   safehead fs f = case fs of { [] -> f; f':_ -> f'; }
-               view (rot allws)
+                   pivoted = uncurry (flip (++)) . span (/=m) $ allws
+                   interesting i = not (i `elem` vis) && not (isEmpty i ws)
+                   nextws = listToMaybe . filter interesting $ pivoted
+               whenJust nextws view
 
 -- | A list of all the workspaces.
 allWorkspaces :: StackSet WorkspaceId j a -> [WorkspaceId]
-allWorkspaces = M.keys . focus
+allWorkspaces = M.keys . W.stacks
+
+isEmpty :: WorkspaceId -> StackSet WorkspaceId j a -> Bool
+isEmpty i = maybe True null . W.index i
-- 
cgit v1.2.3