mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-01 20:51:52 -07:00
ManageDocks: implement AvoidStruts as a layout modifier
This commit is contained in:
@@ -26,6 +26,7 @@ import XMonad
|
|||||||
import Foreign.C.Types (CLong)
|
import Foreign.C.Types (CLong)
|
||||||
-- import Data.Maybe (catMaybes, fromMaybe)
|
-- import Data.Maybe (catMaybes, fromMaybe)
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
import XMonad.Layout.LayoutModifier
|
||||||
|
|
||||||
-- $usage
|
-- $usage
|
||||||
-- To use this module, add the following import to @~\/.xmonad\/xmonad.hs@:
|
-- To use this module, add the following import to @~\/.xmonad\/xmonad.hs@:
|
||||||
@@ -121,29 +122,22 @@ c2r :: RectC -> Rectangle
|
|||||||
c2r (x1, y1, x2, y2) = Rectangle (fi x1) (fi y1) (fi $ x2 - x1) (fi $ y2 - y1)
|
c2r (x1, y1, x2, y2) = Rectangle (fi x1) (fi y1) (fi $ x2 - x1) (fi $ y2 - y1)
|
||||||
|
|
||||||
-- | Adjust layout automagically.
|
-- | Adjust layout automagically.
|
||||||
avoidStruts :: LayoutClass l a => l a -> AvoidStruts l a
|
avoidStruts :: LayoutClass l a => l a -> ModifiedLayout AvoidStruts l a
|
||||||
avoidStruts = AvoidStruts True
|
avoidStruts = ModifiedLayout (AvoidStruts True)
|
||||||
|
|
||||||
data AvoidStruts l a = AvoidStruts Bool (l a) deriving ( Read, Show )
|
data AvoidStruts a = AvoidStruts Bool deriving ( Read, Show )
|
||||||
|
|
||||||
data ToggleStruts = ToggleStruts deriving (Read,Show,Typeable)
|
data ToggleStruts = ToggleStruts deriving (Read,Show,Typeable)
|
||||||
instance Message ToggleStruts
|
instance Message ToggleStruts
|
||||||
|
|
||||||
instance LayoutClass l a => LayoutClass (AvoidStruts l) a where
|
instance LayoutModifier AvoidStruts a where
|
||||||
doLayout (AvoidStruts True lo) r s =
|
modifyLayout (AvoidStruts b) l r s = do
|
||||||
do rect <- fmap ($ r) calcGap
|
nr <- if b then fmap ($ r) calcGap else return r
|
||||||
(wrs,mlo') <- doLayout lo rect s
|
doLayout l nr s
|
||||||
return (wrs, AvoidStruts True `fmap` mlo')
|
|
||||||
doLayout (AvoidStruts False lo) r s = do (wrs,mlo') <- doLayout lo r s
|
|
||||||
return (wrs, AvoidStruts False `fmap` mlo')
|
|
||||||
handleMessage (AvoidStruts b l) m
|
|
||||||
| Just ToggleStruts <- fromMessage m = return $ Just $ AvoidStruts (not b) l
|
|
||||||
| otherwise = do ml' <- handleMessage l m
|
|
||||||
return (AvoidStruts b `fmap` ml')
|
|
||||||
description (AvoidStruts _ l) = description l
|
|
||||||
|
|
||||||
emptyLayout (AvoidStruts b l) r = do (wrs,ml) <- emptyLayout l r
|
handleMess (AvoidStruts b ) m
|
||||||
return (wrs, AvoidStruts b `fmap` ml)
|
| Just ToggleStruts <- fromMessage m = return $ Just $ AvoidStruts (not b)
|
||||||
|
| otherwise = return Nothing
|
||||||
|
|
||||||
data Side = L | R | T | B
|
data Side = L | R | T | B
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user