From 8c595555ce9d1f1d2bfce4bf0ff441d75b79b1c0 Mon Sep 17 00:00:00 2001 From: Andrea Rossato Date: Mon, 18 Feb 2008 11:57:26 +0100 Subject: Refactor MouseResize, remove isDecoration and introduce isInStack, isVisible, isInvisible This patch includes several changes, which are strictly related and cannot be recorded separately: - remove Decoraion.isDecoartion and introduce Decoration.isInStack (with the related change to LayoutHints) - in Decoration introduce useful utilities: isVisible, isInvisible, isWithin and lookFor' - MouseResize: - invisible inputOnly windows will not be created; - fix a bug in the read instance which caused a failure in the state deserialization. darcs-hash:20080218105726-32816-9d42d4fdff75fad3258aec92d059e5155f0e64bc.gz --- XMonad/Layout/Decoration.hs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'XMonad/Layout/Decoration.hs') diff --git a/XMonad/Layout/Decoration.hs b/XMonad/Layout/Decoration.hs index c5b78ae..e18a6d1 100644 --- a/XMonad/Layout/Decoration.hs +++ b/XMonad/Layout/Decoration.hs @@ -27,7 +27,8 @@ module XMonad.Layout.Decoration , shrinkText, CustomShrink ( CustomShrink ) , Shrinker (..), DefaultShrinker , module XMonad.Layout.LayoutModifier - , isDecoration, fi, lookFor + , isInStack, isVisible, isInvisible, isWithin + , lookFor, lookFor', fi ) where import Control.Monad (when) @@ -224,6 +225,11 @@ lookFor w ((wr,(dw,dr)):dwrs) | w == dw = Just (wr,(dw,dr)) | otherwise = lookFor w dwrs lookFor _ [] = Nothing +lookFor' :: Window -> [(OrigWin,DecoWin)] -> Maybe (OrigWin,DecoWin) +lookFor' w (((w',r),dwr):dwrs) | w == w' = Just ((w,r),dwr) + | otherwise = lookFor' w dwrs +lookFor' _ [] = Nothing + getDWs :: [(OrigWin,DecoWin)] -> [Window] getDWs = map (fst . snd) @@ -271,8 +277,23 @@ updateDeco sh t fs ((w,_),(dw,Just (Rectangle _ _ wh ht))) = do paintAndWrite dw fs wh ht 1 bc borderc tc bc AlignCenter name updateDeco _ _ _ (_,(w,Nothing)) = hideWindow w -isDecoration :: Window -> X Bool -isDecoration w = withDisplay (io . flip getWindowAttributes w) >>= return . wa_override_redirect +isInStack :: Eq a => W.Stack a -> a -> Bool +isInStack s = flip elem (W.integrate s) + +isVisible :: Rectangle -> [Rectangle] -> Bool +isVisible r = and . foldr f [] + where f x xs = if r `isWithin` x then False : xs else True : xs + +isInvisible :: Rectangle -> [Rectangle] -> Bool +isInvisible r = not . isVisible r + +isWithin :: Rectangle -> Rectangle -> Bool +isWithin (Rectangle x y w h) (Rectangle rx ry rw rh) + | x >= rx, x <= rx + fi rw + , y >= ry, y <= ry + fi rh + , x + fi w <= rx + fi rw + , y + fi h <= ry + fi rh = True + | otherwise = False shrinkWhile :: (String -> [String]) -> (String -> X Bool) -> String -> X String shrinkWhile sh p x = sw $ sh x -- cgit v1.2.3