/*
* ion/ioncore/rootwin.c
*
- * Copyright (c) Tuomo Valkonen 1999-2007.
+ * Copyright (c) Tuomo Valkonen 1999-2009.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <unistd.h>
/* Just ignore bad window and similar errors; makes the rest of
* the code simpler.
+ *
+ * Apparently XGetWindowProperty can return BadMatch on a race
+ * condition where the server is already reusing the XID for a
+ * non-window drawable, so let's just ignore BadMatch entirely...
*/
if((ev->error_code==BadWindow ||
- (ev->error_code==BadMatch && ev->request_code==X_SetInputFocus) ||
+ (ev->error_code==BadMatch /*&& ev->request_code==X_SetInputFocus*/) ||
(ev->error_code==BadDrawable && ev->request_code==X_GetGeometry)) &&
ignore_badwindow)
return 0;
net_virtual_roots=XInternAtom(ioncore_g.dpy, "_NET_VIRTUAL_ROOTS", False);
XDeleteProperty(ioncore_g.dpy, root, net_virtual_roots);
- /* */ {
- /* TODO: typed LINK_ITEM */
- WRegion *tmp=(WRegion*)ioncore_g.rootwins;
- LINK_ITEM(tmp, (WRegion*)rootwin, p_next, p_prev);
- ioncore_g.rootwins=(WRootWin*)tmp;
- }
+ LINK_ITEM(*(WRegion**)&ioncore_g.rootwins, (WRegion*)rootwin, p_next, p_prev);
xwindow_set_cursor(root, IONCORE_CURSOR_DEFAULT);
destroy_obj((Obj*)scr);
}
- /* */ {
- WRegion *tmp=(WRegion*)ioncore_g.rootwins;
- UNLINK_ITEM(tmp, (WRegion*)rw, p_next, p_prev);
- ioncore_g.rootwins=(WRootWin*)tmp;
- }
+ UNLINK_ITEM(*(WRegion**)&ioncore_g.rootwins, (WRegion*)rw, p_next, p_prev);
XSelectInput(ioncore_g.dpy, WROOTWIN_ROOT(rw), 0);