#include #include #include // // gcc -g -Wall -o testcase testcase.c -lX11 // static int WindowExistsFlag; static int window_exists_err_handler( Display* dpy, XErrorEvent* xerr ) { (void) dpy; if (xerr->error_code == BadWindow) { WindowExistsFlag = 0; } return 0; } static int window_exists( Display *dpy, Window win ) { XWindowAttributes wa; int (*old_handler)(Display*, XErrorEvent*); WindowExistsFlag = 1; old_handler = XSetErrorHandler(window_exists_err_handler); XGetWindowAttributes( dpy, win, &wa ); /* dummy request */ XSetErrorHandler(old_handler); return WindowExistsFlag; } int main() { int i; Display *dpy = XOpenDisplay(NULL); assert(dpy); int blackColor = BlackPixel(dpy, DefaultScreen(dpy)); for (i = 0; i < 2; i++) { Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 200, 100, 0, blackColor, blackColor); XMapWindow(dpy, w); XDestroyWindow(dpy, w); XSync(dpy, 0); window_exists(dpy, w); XSync(dpy, 0); } return 0; }