static int ErrorHandler(Display *dpy, XErrorEvent *event) { LogError ("X error\n"); if (XmuPrintDefaultErrorMessage (dpy, event, stderr) == 0) return 0; exit(UNMANAGE_DISPLAY); }
static int shm_ehandler (Display *dpy, XErrorEvent *error) { shm_got_x_error = True; #ifdef DEBUG fprintf (stderr, "\n%s: ignoring X error from XSHM:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); fprintf (stderr, "\n"); #endif return 0; }
/* * XmuSimpleErrorHandler - ignore errors for XQueryTree, XGetWindowAttributes, * and XGetGeometry; print a message for everything else. In all case, do * not exit. */ int XmuSimpleErrorHandler(Display *dpy, XErrorEvent *errorp) { switch (errorp->request_code) { case X_QueryTree: case X_GetWindowAttributes: if (errorp->error_code == BadWindow) return 0; break; case X_GetGeometry: if (errorp->error_code == BadDrawable) return 0; break; } /* got a "real" X error */ return XmuPrintDefaultErrorMessage (dpy, errorp, stderr); }
static int my_error_handler(Display *dpy, XErrorEvent *ev) { static char msg[128], request[64], num[32]; /* 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==BadDrawable && ev->request_code==X_GetGeometry)) && ignore_badwindow) return 0; #if 0 XmuPrintDefaultErrorMessage(dpy, ev, stderr); #else XGetErrorText(dpy, ev->error_code, msg, 128); snprintf(num, 32, "%d", ev->request_code); XGetErrorDatabaseText(dpy, "XRequest", num, "", request, 64); if(request[0]=='\0') snprintf(request, 64, "<unknown request>"); if(ev->minor_code!=0){ warn("[%d] %s (%d.%d) %#lx: %s", ev->serial, request, ev->request_code, ev->minor_code, ev->resourceid,msg); }else{ warn("[%d] %s (%d) %#lx: %s", ev->serial, request, ev->request_code, ev->resourceid,msg); } #endif kill(getpid(), SIGTRAP); return 0; }