From acdff238a5d09ff0a382cb6cab188635a765f6f8 Mon Sep 17 00:00:00 2001 From: Alec Berryman Date: Thu, 29 Mar 2007 20:21:59 +0200 Subject: Window borders Colors taken from dwm's config.default.h and hard-coded in Operations instead of Config because of import cycle. Windows overlap slightly in the current tiling algorithm and sometimes prevent the active window from being completely surrounded by a red border. darcs-hash:20070329182159-39448-deabaeaf89d87bb71abc851b6bae1ffa356e5561.gz --- Operations.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Operations.hs') diff --git a/Operations.hs b/Operations.hs index b80d16f..ef630db 100644 --- a/Operations.hs +++ b/Operations.hs @@ -142,10 +142,16 @@ withServerX f = withDisplay $ \dpy -> do -- | Explicitly set the keyboard focus to the given window setFocus :: Window -> X () setFocus w = do + -- Remove the border for the window no longer in focus. + ws <- gets workspace + whenJust (W.peek ws) (\oldw -> setBorder oldw 0xdddddd) + -- Set focus to the given window. withDisplay $ \d -> io $ setInputFocus d w revertToPointerRoot 0 -- This does not use 'windows' intentionally. 'windows' calls refresh, -- which means infinite loops. modify (\s -> s { workspace = W.raiseFocus w (workspace s) }) + -- Set new border for raised window. + setBorder w 0xff0000 -- | Set the focus to the window on top of the stack, or root setTopFocus :: X () @@ -155,6 +161,10 @@ 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 () -- cgit v1.2.3