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@
This commit is contained in:
oga 2008-06-13 03:41:58 +00:00
parent 077173527b
commit 01eecac5d4

View File

@ -68,21 +68,9 @@ xev_handle_unmapnotify(struct xevent *xev, XEvent *ee)
{ {
XUnmapEvent *e = &ee->xunmap; XUnmapEvent *e = &ee->xunmap;
struct client_ctx *cc; struct client_ctx *cc;
struct screen_ctx *sc;
int wascurrent;
if ((cc = client_find(e->window)) != NULL) { if ((cc = client_find(e->window)) != NULL)
sc = CCTOSC(cc); xu_setstate(cc, WithdrawnState);
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
}
xev_register(xev); xev_register(xev);
} }