summary refs log tree commit diff
path: root/xevents.c
diff options
context:
space:
mode:
authoroga <oga>2008-06-13 03:41:58 +0000
committeroga <oga>2008-06-13 03:41:58 +0000
commit01eecac5d41058d900b25cf2df6ee413a8e4dd50 (patch)
tree0562aa60409d6e43ed0c5198637934d65af66275 /xevents.c
parent077173527b37c91887a331893529db0c5afc883e (diff)
downloadcwm-01eecac5d41058d900b25cf2df6ee413a8e4dd50.tar.gz
cwm-01eecac5d41058d900b25cf2df6ee413a8e4dd50.tar.xz
cwm-01eecac5d41058d900b25cf2df6ee413a8e4dd50.zip
Don't client_delete() on an Unmap event, only do that on a client delete event.
found by (among others) todd@ when you have a lot of clients and do something
that maps and umaps a lot of windows fast.

Debugged with aid of gdb, todd, okan and NULL pointers in a pizza place in
edmonton while waiting an inordinately long time for food.

ok okan@, todd@
Diffstat (limited to 'xevents.c')
-rw-r--r--xevents.c16
1 files changed, 2 insertions, 14 deletions
diff --git a/xevents.c b/xevents.c
index b5409cb..076f30b 100644
--- a/xevents.c
+++ b/xevents.c
@@ -68,21 +68,9 @@ xev_handle_unmapnotify(struct xevent *xev, XEvent *ee)
 {
 	XUnmapEvent *e = &ee->xunmap;
 	struct client_ctx *cc;
-	struct screen_ctx *sc;
-	int wascurrent;
-
-	if ((cc = client_find(e->window)) != NULL) {
-		sc = CCTOSC(cc);
-		wascurrent = cc == client_current();
-		client_delete(cc, e->send_event, 0);
 
-#ifdef notyet
-		/* XXX disable the ptrwarp until we handle it
-		 * better. */
-		if (!client_delete(cc, e->send_event, 0) && wascurrent)
-			;/* 			client_ptrwarp(new_cc); */
-#endif
-	}
+	if ((cc = client_find(e->window)) != NULL)
+		xu_setstate(cc, WithdrawnState);
 
 	xev_register(xev);
 }