From ded2b911ee97e02f4c1872bccb889f98ada7200f Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Wed, 7 Mar 2007 07:04:47 +0100 Subject: Handle several more events, should fix several issues. darcs-hash:20070307060447-a5988-0a7399c8342b64f6789fba1f4533a36c3031d896.gz --- Main.hs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'Main.hs') diff --git a/Main.hs b/Main.hs index 6fdfbd3..19aed78 100644 --- a/Main.hs +++ b/Main.hs @@ -78,8 +78,12 @@ handle :: Event -> W () handle (MapRequestEvent {window = w}) = manage w handle (DestroyWindowEvent {window = w}) = do - modifyWindows (filter (/= w)) - refresh + ws <- getWindows + when (elem w ws) (unmanage w) + +handle (UnmapEvent {window = w}) = do + ws <- getWindows + when (elem w ws) (unmanage w) handle (KeyEvent {event_type = t, state = mod, keycode = code}) | t == keyPress = do @@ -89,6 +93,20 @@ handle (KeyEvent {event_type = t, state = mod, keycode = code}) [] -> return () ((_, _, act):_) -> act +handle e@(ConfigureRequestEvent {}) = do + dpy <- getDisplay + io $ configureWindow dpy (window e) (value_mask e) $ + WindowChanges + { wcX = x e + , wcY = y e + , wcWidth = width e + , wcHeight = height e + , wcBorderWidth = border_width e + , wcSibling = above e + , wcStackMode = detail e + } + io $ sync dpy False + handle _ = return () -- --------------------------------------------------------------------- @@ -130,6 +148,17 @@ manage w = do withWindows $ \ws -> if w `elem` ws then ws else w:ws -- a set io $ mapWindow d w +-- +-- | unmanage, a window no longer exists, remove it from the stack +-- +unmanage :: Window -> W () +unmanage w = do + dpy <- getDisplay + io $ grabServer dpy + modifyWindows (filter (/= w)) + io $ sync dpy False + io $ ungrabServer dpy + refresh -- -- | switch. switch focus to next window in list. -- cgit v1.2.3