diff options
-rw-r--r-- | Config.hs | 5 | ||||
-rw-r--r-- | Main.hs | 6 | ||||
-rw-r--r-- | Operations.hs | 11 | ||||
-rw-r--r-- | XMonad.hs | 2 |
4 files changed, 17 insertions, 7 deletions
@@ -106,6 +106,11 @@ defaultDelta = 3%100 numlockMask :: KeyMask numlockMask = mod2Mask +-- Border colors for unfocused and focused windows, respectively. +normalBorderColor, focusedBorderColor :: String +normalBorderColor = "#dddddd" +focusedBorderColor = "#ff0000" + -- What layout to start in, and what the default proportion for the -- left pane should be in the tiled layout. See LayoutDesc and -- friends in XMonad.hs for options. @@ -35,10 +35,14 @@ main :: IO () main = do dpy <- openDisplay "" let dflt = defaultScreen dpy + initcolor c = fst `liftM` allocNamedColor dpy (defaultColormap dpy dflt) c + rootw <- rootWindow dpy dflt wmdelt <- internAtom dpy "WM_DELETE_WINDOW" False wmprot <- internAtom dpy "WM_PROTOCOLS" False xinesc <- getScreenInfo dpy + nbc <- initcolor normalBorderColor + fbc <- initcolor focusedBorderColor let st = XState { display = dpy @@ -52,6 +56,8 @@ main = do , workspace = W.empty workspaces (length xinesc) , defaultLayoutDesc = startingLayoutDesc , layoutDescs = M.empty + , normalBorder = nbc + , focusedBorder = fbc } xSetErrorHandler -- in C, I'm too lazy to write the binding diff --git a/Operations.hs b/Operations.hs index 4346398..49094d1 100644 --- a/Operations.hs +++ b/Operations.hs @@ -189,17 +189,18 @@ safeFocus w = do ws <- gets workspace -- | Explicitly set the keyboard focus to the given window setFocus :: Window -> X () setFocus w = do - ws <- gets workspace + XState { workspace = ws, display = dpy + , normalBorder = nbc, focusedBorder = fbc } <- get -- clear mouse button grab and border on other windows flip mapM_ (W.visibleWorkspaces ws) $ \n -> do flip mapM_ (W.index n ws) $ \otherw -> do setButtonGrab True otherw - setBorder otherw 0xdddddd + io $ setWindowBorder dpy otherw (color_pixel nbc) withDisplay $ \d -> io $ setInputFocus d w revertToPointerRoot 0 setButtonGrab False w - setBorder w 0xff0000 -- make this configurable + io $ setWindowBorder dpy w (color_pixel fbc) -- This does not use 'windows' intentionally. 'windows' calls refresh, -- which means infinite loops. @@ -213,10 +214,6 @@ setTopFocus = do Just new -> setFocus new Nothing -> gets theRoot >>= setFocus --- | Set the border color for a particular window. -setBorder :: Window -> Pixel -> X () -setBorder w p = withDisplay $ \d -> io $ setWindowBorder d w p - -- | raise. focus to window at offset 'n' in list. -- The currently focused window is always the head of the list raise :: Ordering -> X () @@ -46,6 +46,8 @@ data XState = XState , defaultLayoutDesc :: !LayoutDesc -- ^ default layout , layoutDescs :: !(M.Map WorkspaceId LayoutDesc) -- ^ mapping of workspaces -- to descriptions of their layouts + , normalBorder :: !Color -- ^ border color of unfocused windows + , focusedBorder :: !Color -- ^ border color of the focused window } type WindowSet = StackSet WorkspaceId ScreenId Window |