mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-01 04:31:52 -07:00
Add the ability to specify padding used with Maximize
This commit is contained in:
@@ -19,6 +19,7 @@ module XMonad.Layout.Maximize (
|
|||||||
-- * Usage
|
-- * Usage
|
||||||
-- $usage
|
-- $usage
|
||||||
maximize,
|
maximize,
|
||||||
|
maximizeWithPadding,
|
||||||
maximizeRestore,
|
maximizeRestore,
|
||||||
Maximize, MaximizeRestore,
|
Maximize, MaximizeRestore,
|
||||||
) where
|
) where
|
||||||
@@ -35,7 +36,13 @@ import Data.List ( partition )
|
|||||||
--
|
--
|
||||||
-- Then edit your @layoutHook@ by adding the Maximize layout modifier:
|
-- Then edit your @layoutHook@ by adding the Maximize layout modifier:
|
||||||
--
|
--
|
||||||
-- > myLayout = maximize (Tall 1 (3/100) (1/2)) ||| Full ||| etc..
|
-- > myLayout = maximize (Tall 1 (3/100) (1/2)) ||| Full ||| etc..)
|
||||||
|
-- > main = xmonad def { layoutHook = myLayout }
|
||||||
|
--
|
||||||
|
-- Or, if you want to control the amount of padding placed around the
|
||||||
|
-- maximized window:
|
||||||
|
--
|
||||||
|
-- > myLayout = maximizeWithPadding 10 (Tall 1 (3/100) (1/2)) ||| Full ||| etc..)
|
||||||
-- > main = xmonad def { layoutHook = myLayout }
|
-- > main = xmonad def { layoutHook = myLayout }
|
||||||
--
|
--
|
||||||
-- For more detailed instructions on editing the layoutHook see:
|
-- For more detailed instructions on editing the layoutHook see:
|
||||||
@@ -51,9 +58,14 @@ import Data.List ( partition )
|
|||||||
--
|
--
|
||||||
-- "XMonad.Doc.Extending#Editing_key_bindings".
|
-- "XMonad.Doc.Extending#Editing_key_bindings".
|
||||||
|
|
||||||
data Maximize a = Maximize (Maybe Window) deriving ( Read, Show )
|
data Maximize a = Maximize Dimension (Maybe Window) deriving ( Read, Show )
|
||||||
maximize :: LayoutClass l Window => l Window -> ModifiedLayout Maximize l Window
|
maximize :: LayoutClass l Window => l Window -> ModifiedLayout Maximize l Window
|
||||||
maximize = ModifiedLayout $ Maximize Nothing
|
maximize = ModifiedLayout $ Maximize 25 Nothing
|
||||||
|
|
||||||
|
-- | Like 'maximize', but allows you to specify the amount of padding
|
||||||
|
-- placed around the maximized window.
|
||||||
|
maximizeWithPadding :: LayoutClass l Window => Dimension -> l Window -> ModifiedLayout Maximize l Window
|
||||||
|
maximizeWithPadding padding = ModifiedLayout $ Maximize padding Nothing
|
||||||
|
|
||||||
data MaximizeRestore = MaximizeRestore Window deriving ( Typeable, Eq )
|
data MaximizeRestore = MaximizeRestore Window deriving ( Typeable, Eq )
|
||||||
instance Message MaximizeRestore
|
instance Message MaximizeRestore
|
||||||
@@ -61,26 +73,28 @@ maximizeRestore :: Window -> MaximizeRestore
|
|||||||
maximizeRestore = MaximizeRestore
|
maximizeRestore = MaximizeRestore
|
||||||
|
|
||||||
instance LayoutModifier Maximize Window where
|
instance LayoutModifier Maximize Window where
|
||||||
modifierDescription (Maximize _) = "Maximize"
|
modifierDescription (Maximize _ _) = "Maximize"
|
||||||
pureModifier (Maximize (Just target)) rect (Just (S.Stack focused _ _)) wrs =
|
pureModifier (Maximize padding (Just target)) rect (Just (S.Stack focused _ _)) wrs =
|
||||||
if focused == target
|
if focused == target
|
||||||
then (maxed ++ rest, Nothing)
|
then (maxed ++ rest, Nothing)
|
||||||
else (rest ++ maxed, lay)
|
else (rest ++ maxed, lay)
|
||||||
where
|
where
|
||||||
(toMax, rest) = partition (\(w, _) -> w == target) wrs
|
(toMax, rest) = partition (\(w, _) -> w == target) wrs
|
||||||
maxed = map (\(w, _) -> (w, maxRect)) toMax
|
maxed = map (\(w, _) -> (w, maxRect)) toMax
|
||||||
maxRect = Rectangle (rect_x rect + 25) (rect_y rect + 25)
|
maxRect = Rectangle (rect_x rect + fromIntegral padding)
|
||||||
(rect_width rect - 50) (rect_height rect - 50)
|
(rect_y rect + fromIntegral padding)
|
||||||
lay | null maxed = Just (Maximize Nothing)
|
(rect_width rect - padding * 2)
|
||||||
|
(rect_height rect - padding * 2)
|
||||||
|
lay | null maxed = Just (Maximize padding Nothing)
|
||||||
| otherwise = Nothing
|
| otherwise = Nothing
|
||||||
pureModifier _ _ _ wrs = (wrs, Nothing)
|
pureModifier _ _ _ wrs = (wrs, Nothing)
|
||||||
|
|
||||||
pureMess (Maximize mw) m = case fromMessage m of
|
pureMess (Maximize padding mw) m = case fromMessage m of
|
||||||
Just (MaximizeRestore w) -> case mw of
|
Just (MaximizeRestore w) -> case mw of
|
||||||
Just w' -> if (w == w')
|
Just w' -> if (w == w')
|
||||||
then Just $ Maximize Nothing -- restore window
|
then Just $ Maximize padding Nothing -- restore window
|
||||||
else Just $ Maximize $ Just w -- maximize different window
|
else Just $ Maximize padding $ Just w -- maximize different window
|
||||||
Nothing -> Just $ Maximize $ Just w -- maximize window
|
Nothing -> Just $ Maximize padding $ Just w -- maximize window
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
|
||||||
-- vim: sw=4:et
|
-- vim: sw=4:et
|
||||||
|
Reference in New Issue
Block a user