summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--StackSet.hs8
-rw-r--r--tests/Properties.hs3
2 files changed, 9 insertions, 2 deletions
diff --git a/StackSet.hs b/StackSet.hs
index 1dd4579..f77edd1 100644
--- a/StackSet.hs
+++ b/StackSet.hs
@@ -21,7 +21,7 @@ module StackSet (
-- * Xinerama operations
-- $xinerama
lookupWorkspace,
- screens, workspaces,
+ screens, workspaces, allWindows,
-- * Operations on the current stack
-- $stackOperations
peek, index, integrate, integrate', differentiate,
@@ -43,7 +43,7 @@ module StackSet (
import Prelude hiding (filter)
import Data.Maybe (listToMaybe,fromJust)
-import qualified Data.List as L (deleteBy,find,splitAt,filter)
+import qualified Data.List as L (deleteBy,find,splitAt,filter,nub)
import Data.List ( (\\) )
import qualified Data.Map as M (Map,insert,delete,empty)
@@ -400,6 +400,10 @@ screens s = current s : visible s
workspaces :: StackSet i l a s sd -> [Workspace i l a]
workspaces s = workspace (current s) : map workspace (visible s) ++ hidden s
+-- | Get a list of all windows in the StackSet in no particular order
+allWindows :: Eq a => StackSet i l a s sd -> [a]
+allWindows = L.nub . concatMap (integrate' . stack) . workspaces
+
-- | Is the given tag present in the StackSet?
tagMember :: Eq i => i -> StackSet i l a s sd -> Bool
tagMember t = elem t . map tag . workspaces
diff --git a/tests/Properties.hs b/tests/Properties.hs
index 2bc5443..9818f30 100644
--- a/tests/Properties.hs
+++ b/tests/Properties.hs
@@ -363,6 +363,8 @@ prop_findIndex (x :: T) =
, i <- focus t : up t ++ down t
]
+prop_allWindowsMember w (x :: T) = (w `elem` allWindows x) ==> member w x
+
-- ---------------------------------------------------------------------
-- 'insert'
@@ -687,6 +689,7 @@ main = do
,("focusWindow works" , mytest prop_focusWindow_works)
,("findIndex" , mytest prop_findIndex)
+ ,("allWindows/member" , mytest prop_allWindowsMember)
,("insert: invariant" , mytest prop_insertUp_I)
,("insert/new" , mytest prop_insert_empty)