nextLayoutIncluding layouts = do
cws <- gets (W.workspace . W.current . windowset)
sendMessageWithNoRefresh NextLayout cws
- nextLayoutIncluding' layouts
+ nextLayoutIncluding' layouts 1000 -- nobody has more than 1000 layouts
-nextLayoutIncluding' :: [String] -> X ()
-nextLayoutIncluding' layouts = do
+nextLayoutIncluding' :: [String] -> Int -> X ()
+nextLayoutIncluding' layouts iterations = do
cws <- gets (W.workspace . W.current . windowset)
- if not $ (description $ W.layout cws) `elem` layouts
+ -- iterations prevents an endless loop if no valid layout can be found.
+ if not ((description $ W.layout cws) `elem` layouts) && iterations > 0
-- Skip over excluded layouts.
then do
sendMessageWithNoRefresh NextLayout cws
- nextLayoutIncluding' layouts
+ nextLayoutIncluding' layouts (iterations - 1)
-- Found allowed layout, show it.
else refresh