diff options
author | Don Stewart <dons@cse.unsw.edu.au> | 2007-05-28 04:51:35 +0200 |
---|---|---|
committer | Don Stewart <dons@cse.unsw.edu.au> | 2007-05-28 04:51:35 +0200 |
commit | 631435da5f7a4986180b3224fa7391bbb020193a (patch) | |
tree | f9deeb26cc6ad1d2b87d679df182c9f65b9646b0 | |
parent | 7d9c1905cdcb863db1d073e53ef53fa9685e70bf (diff) | |
download | metatile-631435da5f7a4986180b3224fa7391bbb020193a.tar metatile-631435da5f7a4986180b3224fa7391bbb020193a.zip |
Use (Int,Int,Int,Int) for arbitrary gaps on any side of the screen
darcs-hash:20070528025135-9c5c1-3c0f63ac557da57cd268cd0129b9ce90692631e4
-rw-r--r-- | Config.hs | 13 | ||||
-rw-r--r-- | Main.hs | 2 | ||||
-rw-r--r-- | Operations.hs | 11 | ||||
-rw-r--r-- | XMonad.hs | 25 |
4 files changed, 28 insertions, 23 deletions
@@ -49,9 +49,14 @@ defaultDelta = 3%100 defaultWindowsInMaster :: Int defaultWindowsInMaster = 1 --- Default height of gap at top of screen for a menu bar (e.g. 15) -defaultStatusGap :: Int -defaultStatusGap = 0 -- 15 for default dzen +-- Default offset of drawable screen boundary from physical screen. +-- Anything non-zero here will leave a gap of that many pixels on the +-- given edge. A useful gap at top of screen for a menu bar (e.g. 15) +-- +-- Fields are: top, bottom, left, right. +-- +defaultGap :: (Int,Int,Int,Int) +defaultGap = (0,0,0,0) -- 15 for default dzen -- numlock handling: -- @@ -115,7 +120,7 @@ keys = M.fromList $ , ((modMask , xK_period), sendMessage (IncMasterN (-1))) -- @@ Deincrement the number of windows in the master area -- toggle the status bar gap - , ((modMask , xK_b ), modifyGap (\n -> if n == 0 then defaultStatusGap else 0)) -- @@ Toggle the status bar gap + , ((modMask , xK_b ), modifyGap (\n -> if n == defaultGap then (0,0,0,0) else defaultGap)) -- @@ Toggle the status bar gap -- quit, or restart , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) -- @@ Quit xmonad @@ -61,7 +61,7 @@ main = do st = XState { windowset = winset , layouts = M.fromList [(w, safeLayouts) | w <- [0 .. W workspaces - 1]] - , statusGap = defaultStatusGap + , statusGap = defaultGap , xineScreens = xinesc , dimensions = (fromIntegral (displayWidth dpy dflt), fromIntegral (displayHeight dpy dflt)) } diff --git a/Operations.hs b/Operations.hs index 8d99569..56e15d9 100644 --- a/Operations.hs +++ b/Operations.hs @@ -68,8 +68,8 @@ view :: WorkspaceId -> X () view = windows . W.view -- | Modify the size of the status gap at the top of the screen -modifyGap :: (Int -> Int) -> X () -modifyGap f = modify (\s -> s { statusGap = max 0 (f (statusGap s)) }) >> refresh +modifyGap :: ((Int,Int,Int,Int) -> (Int,Int,Int,Int)) -> X () +modifyGap f = modify (\s -> s { statusGap = f (statusGap s) }) >> refresh -- | Kill the currently focused client. If we do kill it, we'll get a -- delete notify back from X. @@ -127,7 +127,7 @@ hide w = withDisplay $ \d -> do -- refresh :: X () refresh = do - XState { windowset = ws, layouts = fls, xineScreens = xinesc, statusGap = gap } <- get + XState { windowset = ws, layouts = fls, xineScreens = xinesc, statusGap = (gt,gb,gl,gr) } <- get d <- asks display -- for each workspace, layout the currently visible workspaces @@ -139,7 +139,10 @@ refresh = do -- now tile the windows on this workspace, and set gap maybe on current rs <- doLayout l (if w == W.current ws - then Rectangle sx (sy + fromIntegral gap) sw (sh - fromIntegral gap) + then Rectangle (sx + fromIntegral gl) + (sy + fromIntegral gt) + (sw - fromIntegral (gl + gr)) + (sh - fromIntegral (gt + gb)) else r) (W.index this) mapM_ (\(win,rect) -> io (tileWindow d win rect)) rs @@ -37,23 +37,20 @@ import qualified Data.Map as M -- | XState, the window manager state. -- Just the display, width, height and a window list data XState = XState - { windowset :: !WindowSet -- ^ workspace list - , xineScreens :: ![Rectangle] -- ^ dimensions of each screen - , dimensions :: !(Position,Position) -- ^ dimensions of the screen, - , statusGap :: !Int -- ^ width of status bar - -- used for hiding windows - , layouts :: !(M.Map WorkspaceId (Layout, [Layout])) } + { windowset :: !WindowSet -- ^ workspace list + , xineScreens :: ![Rectangle] -- ^ dimensions of each screen + , dimensions :: !(Position,Position) -- ^ dimensions of the screen, + , statusGap :: !(Int,Int,Int,Int) -- ^ width of status bar + , layouts :: !(M.Map WorkspaceId (Layout, [Layout])) } -- ^ mapping of workspaces to descriptions of their layouts data XConf = XConf - { display :: Display -- ^ the X11 display - - , theRoot :: !Window -- ^ the root window - , wmdelete :: !Atom -- ^ window deletion atom - , wmprotocols :: !Atom -- ^ wm protocols atom - - , normalBorder :: !Color -- ^ border color of unfocused windows - , focusedBorder :: !Color } -- ^ border color of the focused window + { display :: Display -- ^ the X11 display + , theRoot :: !Window -- ^ the root window + , wmdelete :: !Atom -- ^ window deletion atom + , wmprotocols :: !Atom -- ^ wm protocols atom + , normalBorder :: !Color -- ^ border color of unfocused windows + , focusedBorder :: !Color } -- ^ border color of the focused window type WindowSet = StackSet WorkspaceId Window ScreenId |