]> ruderich.org/simon Gitweb - config/dotfiles.git/commitdiff
xmonad.hs: Fix endless loop in nextLayoutIncluding.
authorSimon Ruderich <simon@ruderich.org>
Sun, 19 Jun 2011 12:51:29 +0000 (14:51 +0200)
committerSimon Ruderich <simon@ruderich.org>
Sun, 19 Jun 2011 12:51:29 +0000 (14:51 +0200)
xmonad.hs

index 395d449cffd2c06aac43da9af34a0bed4a1ef643..d4c323a162c12236484828adb40b75316c4ece51 100644 (file)
--- a/xmonad.hs
+++ b/xmonad.hs
@@ -108,16 +108,17 @@ nextLayoutIncluding :: [String] -> X ()
 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