From 4a7fbb95609ed14c39961b79e7579822e916995c Mon Sep 17 00:00:00 2001 From: Jamie Webb Date: Thu, 4 Oct 2007 08:12:02 +0200 Subject: Maximize layout modifier darcs-hash:20071004061202-74a73-0a04ff619bbda89563c2511bd4b43120d6e70a99.gz --- Maximize.hs | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MetaModule.hs | 1 + 2 files changed, 73 insertions(+) create mode 100644 Maximize.hs diff --git a/Maximize.hs b/Maximize.hs new file mode 100644 index 0000000..2322c54 --- /dev/null +++ b/Maximize.hs @@ -0,0 +1,72 @@ +{-# LANGUAGE FlexibleInstances #-} + +----------------------------------------------------------------------------- +-- | +-- Module : XMonadContrib.Maximize +-- Copyright : (c) 2007 James Webb +-- License : BSD3-style (see LICENSE) +-- +-- Maintainer : xmonad#jwebb,sygneca,com +-- Stability : unstable +-- Portability : unportable +-- +-- Temporarily yanks the focused window out of the layout to mostly fill +-- the screen. +-- +----------------------------------------------------------------------------- + +module XMonadContrib.Maximize ( + -- * Usage + -- $usage + maximize, + maximizeRestore + ) where + +import Graphics.X11.Xlib +import XMonad +import XMonadContrib.LayoutModifier +import Data.List ( partition ) + +-- $usage +-- You can use this module with the following in your Config.hs file: +-- +-- > import XMonadContrib.Maximize +-- +-- > defaultLayouts = ... +-- > , Layout $ maximize $ myLayout ... +-- > ... +-- +-- > keys = ... +-- > , ((modMask, xK_backslash), withFocused (sendMessage . maximizeRestore)) +-- > ... + +-- %import XMonadContrib.Maximize +-- %layout , Layout $ maximize $ myLayout + +data Maximize a = Maximize (Maybe Window) deriving ( Read, Show ) +maximize :: LayoutClass l Window => l Window -> ModifiedLayout Maximize l Window +maximize = ModifiedLayout $ Maximize Nothing + +data MaximizeRestore = MaximizeRestore Window deriving ( Typeable, Eq ) +instance Message MaximizeRestore +maximizeRestore :: Window -> MaximizeRestore +maximizeRestore = MaximizeRestore + +instance LayoutModifier Maximize Window where + modifierDescription (Maximize _) = "Maximize" + redoLayout (Maximize mw) rect _ wrs = case mw of + Just win -> + return (maxed ++ rest, Nothing) + where + maxed = map (\(w, _) -> (w, maxRect)) toMax + (toMax, rest) = partition (\(w, _) -> w == win) wrs + maxRect = Rectangle (rect_x rect + 50) (rect_y rect + 50) + (rect_width rect - 100) (rect_height rect - 100) + Nothing -> return (wrs, Nothing) + handleMess (Maximize mw) m = case fromMessage m of + Just (MaximizeRestore w) -> case mw of + Just _ -> return $ Just $ Maximize Nothing + Nothing -> return $ Just $ Maximize $ Just w + _ -> return Nothing + +-- vim: sw=4:et diff --git a/MetaModule.hs b/MetaModule.hs index 81aa35d..9c30836 100644 --- a/MetaModule.hs +++ b/MetaModule.hs @@ -45,6 +45,7 @@ import XMonadContrib.LayoutHints () import XMonadContrib.LayoutScreens () import XMonadContrib.MagicFocus () -- import XMonadContrib.Magnifier () +import XMonadContrib.Maximize () -- import XMonadContrib.Mosaic () import XMonadContrib.MosaicAlt () import XMonadContrib.NamedWindows () -- cgit v1.2.3