diff options
-rw-r--r-- | StackSet.hs | 8 | ||||
-rw-r--r-- | tests/Properties.hs | 3 |
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) |