aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LayoutHints.hs29
1 files changed, 16 insertions, 13 deletions
diff --git a/LayoutHints.hs b/LayoutHints.hs
index e171d16..2e8d87e 100644
--- a/LayoutHints.hs
+++ b/LayoutHints.hs
@@ -14,34 +14,37 @@
module XMonadContrib.LayoutHints (
-- * usage
-- $usage
- layoutHints) where
+ LayoutHints) where
import Operations ( applySizeHints, D )
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Extras ( getWMNormalHints )
import {-#SOURCE#-} Config (borderWidth)
import XMonad hiding ( trace )
-import XMonadContrib.LayoutHelpers ( layoutModify, idModMod )
+import XMonadContrib.LayoutModifier
-- $usage
-- > import XMonadContrib.LayoutHints
-- > defaultLayouts = [ layoutHints tiled , layoutHints $ mirror tiled ]
-- %import XMonadContrib.LayoutHints
--- %layout , layoutHints tiled
--- %layout , layoutHints $ mirror tiled
+-- %layout , ModifiedLayout LayoutHints $ layoutHints tiled
+-- %layout , ModifiedLayout LayoutHints $ mirror tiled
-- | Expand a size by the given multiple of the border width. The
-- multiple is most commonly 1 or -1.
adjBorders :: Dimension -> D -> D
adjBorders mult (w,h) = (w+2*mult*borderWidth, h+2*mult*borderWidth)
-layoutHints :: Layout Window -> Layout Window
-layoutHints = layoutModify applyHints idModMod
- where applyHints _ _ xs = do xs' <- mapM applyHint xs
- return (xs', Nothing)
- applyHint (w,Rectangle a b c d) =
- withDisplay $ \disp ->
- do sh <- io $ getWMNormalHints disp w
- let (c',d') = adjBorders 1 . applySizeHints sh . adjBorders (-1) $ (c,d)
- return (w, Rectangle a b c' d')
+data LayoutHints a = LayoutHints deriving (Read, Show)
+
+instance LayoutModifier LayoutHints Window where
+ redoLayout _ _ _ xs = do
+ xs' <- mapM applyHint xs
+ return (xs', Nothing)
+ where
+ applyHint (w,Rectangle a b c d) =
+ withDisplay $ \disp -> do
+ sh <- io $ getWMNormalHints disp w
+ let (c',d') = adjBorders 1 . applySizeHints sh . adjBorders (-1) $ (c,d)
+ return (w, Rectangle a b c' d')