X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glsnapshot.cpp;h=6385fcc140c12ba31fe29fb82a7423c642ae251d;hb=234d0bcb5e59b7d11697beb241fb1e13270b1807;hp=98a11fb1d5d78b55b9505286c6b0030f03861f34;hpb=d46b8d338220dd9935f25651c75046b9081b758a;p=apitrace diff --git a/glsnapshot.cpp b/glsnapshot.cpp index 98a11fb..6385fcc 100644 --- a/glsnapshot.cpp +++ b/glsnapshot.cpp @@ -32,6 +32,31 @@ #include "glsize.hpp" +#if !defined(_WIN32) && !defined(__APPLE__) + + +#include + + +static int +errorHandler(Display *display, XErrorEvent *event) +{ + if (event->error_code == BadDrawable && + event->request_code == X_GetGeometry) { + return 0; + } + + char error_text[512]; + XGetErrorText(display, event->error_code, error_text, sizeof error_text); + fprintf(stderr, "X Error of failed request: %s\n", error_text); + + return 0; +} + + +#endif /* !_WIN32 && !__APPLE__ */ + + namespace glsnapshot { @@ -91,7 +116,13 @@ getDrawableImage(void) { * XXX: This does not work for drawables created with glXCreateWindow */ - if (!XGetGeometry(display, drawable, &root, &x, &y, &w, &h, &bw, &depth)) { + int (*oldErrorHandler)(Display *, XErrorEvent *); + Status status; + + oldErrorHandler = XSetErrorHandler(errorHandler); + status = XGetGeometry(display, drawable, &root, &x, &y, &w, &h, &bw, &depth); + XSetErrorHandler(oldErrorHandler); + if (!status) { return false; }