summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSpencer Janssen <sjanssen@cse.unl.edu>2007-12-11 08:48:10 +0100
committerSpencer Janssen <sjanssen@cse.unl.edu>2007-12-11 08:48:10 +0100
commit1ba3225eb8c485b80a709859dbe525fb4960aea9 (patch)
tree67c0249c4648097052867a76517deca8534ffda3
parentfa9f240c658446d89c98f1ba6589b2b34472a3b8 (diff)
downloadmetatile-1ba3225eb8c485b80a709859dbe525fb4960aea9.tar
metatile-1ba3225eb8c485b80a709859dbe525fb4960aea9.zip
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
-rw-r--r--XMonad/Main.hs5
-rw-r--r--XMonad/Operations.hs1
2 files changed, 4 insertions, 2 deletions
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.
diff --git a/XMonad/Operations.hs b/XMonad/Operations.hs
index f13e2ca..5e87f32 100644
--- a/XMonad/Operations.hs
+++ b/XMonad/Operations.hs
@@ -77,7 +77,6 @@ unmanage :: Window -> X ()
unmanage w = do
windows (W.delete w)
setWMState w withdrawnState
- modify (\s -> s {mapped = S.delete w (mapped s), waitingUnmap = M.delete w (waitingUnmap s)})
-- | Modify the size of the status gap at the top of the current screen
-- Taking a function giving the current screen, and current geometry.