summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Stewart <dons@cse.unsw.edu.au>2007-05-28 04:51:35 +0200
committerDon Stewart <dons@cse.unsw.edu.au>2007-05-28 04:51:35 +0200
commit631435da5f7a4986180b3224fa7391bbb020193a (patch)
treef9deeb26cc6ad1d2b87d679df182c9f65b9646b0
parent7d9c1905cdcb863db1d073e53ef53fa9685e70bf (diff)
downloadmetatile-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.hs13
-rw-r--r--Main.hs2
-rw-r--r--Operations.hs11
-rw-r--r--XMonad.hs25
4 files changed, 28 insertions, 23 deletions
diff --git a/Config.hs b/Config.hs
index 0f7bb07..8d0f4f7 100644
--- a/Config.hs
+++ b/Config.hs
@@ -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
diff --git a/Main.hs b/Main.hs
index f493d80..106db0d 100644
--- a/Main.hs
+++ b/Main.hs
@@ -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
diff --git a/XMonad.hs b/XMonad.hs
index 6233257..839b1dd 100644
--- a/XMonad.hs
+++ b/XMonad.hs
@@ -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