aboutsummaryrefslogtreecommitdiffstats
path: root/WindowNavigation.hs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--WindowNavigation.hs37
1 files changed, 17 insertions, 20 deletions
diff --git a/WindowNavigation.hs b/WindowNavigation.hs
index ffc8df9..9e44182 100644
--- a/WindowNavigation.hs
+++ b/WindowNavigation.hs
@@ -27,6 +27,7 @@ import XMonad
import qualified StackSet as W
import Operations ( focus, initColor )
import XMonadContrib.LayoutModifier
+import XMonadContrib.Invisible
-- $usage
-- You can use this module with the following in your Config.hs file:
@@ -56,15 +57,11 @@ data Navigate = Go Direction deriving ( Read, Show, Typeable )
data Direction = U | D | R | L deriving ( Read, Show, Eq )
instance Message Navigate
-data InvisibleMaybe a = INothin | IJus a
-instance Show (InvisibleMaybe a) where show _ = ""
-instance Read (InvisibleMaybe a) where readsPrec _ s = [(INothin, s)]
-
data NavigationState a = NS Point [(a,Rectangle)]
-data WindowNavigation a = WindowNavigation (InvisibleMaybe (NavigationState a)) deriving ( Read, Show )
+data WindowNavigation a = WindowNavigation (Invisible Maybe (NavigationState a)) deriving ( Read, Show )
-windowNavigation = ModifiedLayout (WindowNavigation INothin)
+windowNavigation = ModifiedLayout (WindowNavigation (I Nothing))
instance LayoutModifier WindowNavigation Window where
redoLayout (WindowNavigation state) rscr s wrs =
@@ -77,34 +74,34 @@ instance LayoutModifier WindowNavigation Window where
w = W.focus s
r = case filter ((==w).fst) wrs of ((_,x):_) -> x
[] -> rscr
- pt = case state of IJus (NS ptold _) | ptold `inrect` r -> ptold
+ pt = case state of I (Just (NS ptold _)) | ptold `inrect` r -> ptold
_ -> center r
wrs' = filter ((/=w) . fst) wrs
wnavigable = nub $ map fst $ concatMap (\d -> filter (inr d pt . snd) wrs') [U,D,R,L]
wothers = map fst wrs' \\ wnavigable
--mapM_ (sc navigableColor) wnavigable
--mapM_ (sc otherColor) wothers
- return (wrs, Just $ WindowNavigation $ IJus $ NS pt wrs')
- modifyModify (WindowNavigation (IJus (NS pt wrs))) m
+ return (wrs, Just $ WindowNavigation $ I $ Just $ NS pt wrs')
+ modifyModify (WindowNavigation (I (Just (NS pt wrs)))) m
| Just (Go d) <- fromMessage m = case sortby d $ filter (inr d pt . snd) wrs of
[] -> return Nothing
((w,r):_) -> do focus w
- return $ Just $ WindowNavigation $ IJus $ NS (centerd d pt r) []
+ return $ Just $ WindowNavigation $ I $ Just $ NS (centerd d pt r) []
modifyModify _ _ = return Nothing
center (Rectangle x y w h) = P (fromIntegral x + fromIntegral w/2) (fromIntegral y + fromIntegral h/2)
centerd d (P xx yy) (Rectangle x y w h) | d == U || d == D = P xx (fromIntegral y + fromIntegral h/2)
| otherwise = P (fromIntegral x + fromIntegral w/2) yy
-inr D (P x y) (Rectangle l yr w h) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
- y < fromIntegral yr + fromIntegral h
-inr U (P x y) (Rectangle l yr w _) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
- y > fromIntegral yr
-inr R (P a x) (Rectangle b l _ w) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
- a < fromIntegral b
-inr L (P a x) (Rectangle b l c w) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
- a > fromIntegral b + fromIntegral c
-inrect (P x y) (Rectangle a b w h) = x > fromIntegral a && x < fromIntegral a + fromIntegral w &&
- y > fromIntegral b && y < fromIntegral b + fromIntegral h
+inr D (P x y) (Rectangle l yr w h) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
+ y < fromIntegral yr + fromIntegral h
+inr U (P x y) (Rectangle l yr w _) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
+ y > fromIntegral yr
+inr R (P a x) (Rectangle b l _ w) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
+ a < fromIntegral b
+inr L (P a x) (Rectangle b l c w) = x >= fromIntegral l && x <= fromIntegral l + fromIntegral w &&
+ a > fromIntegral b + fromIntegral c
+inrect (P x y) (Rectangle a b w h) = x > fromIntegral a && x < fromIntegral a + fromIntegral w &&
+ y > fromIntegral b && y < fromIntegral b + fromIntegral h
sortby U = sortBy (\(_,Rectangle _ y _ _) (_,Rectangle _ y' _ _) -> compare y' y)
sortby D = sortBy (\(_,Rectangle _ y _ _) (_,Rectangle _ y' _ _) -> compare y y')