From 01eecac5d41058d900b25cf2df6ee413a8e4dd50 Mon Sep 17 00:00:00 2001 From: oga Date: Fri, 13 Jun 2008 03:41:58 +0000 Subject: [PATCH] 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@ --- xevents.c | 16 ++-------------- 1 file 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); }