From dad05153b2268d2df6c9160f5142604458d9741e Mon Sep 17 00:00:00 2001
From: Spencer Janssen <sjanssen@cse.unl.edu>
Date: Tue, 11 Dec 2007 08:48:10 +0100
Subject: Clean up stale mapped/waitingUnmap state in handle rather than
 unmanage.

This is an attempt to fix issue #96.  Thanks to jcreigh for the insights
necessary to fix the bug.

darcs-hash:20071211074810-a5988-47be5e16650bf0c0ad5d0e638d03753a78958fd6.gz
---
 XMonad/Main.hs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'XMonad/Main.hs')

diff --git a/XMonad/Main.hs b/XMonad/Main.hs
index c25eabf..60d8e6a 100644
--- a/XMonad/Main.hs
+++ b/XMonad/Main.hs
@@ -143,7 +143,10 @@ handle (MapRequestEvent    {ev_window = w}) = withDisplay $ \dpy -> do
 
 -- window destroyed, unmanage it
 -- window gone,      unmanage it
-handle (DestroyWindowEvent {ev_window = w}) = whenX (isClient w) $ unmanage w
+handle (DestroyWindowEvent {ev_window = w}) = whenX (isClient w) $ do
+    unmanage w
+    modify (\s -> s { mapped       = S.delete w (mapped s)
+                    , waitingUnmap = M.delete w (waitingUnmap s)})
 
 -- We track expected unmap events in waitingUnmap.  We ignore this event unless
 -- it is synthetic or we are not expecting an unmap notification from a window.
-- 
cgit v1.2.3