#include "glsize.hpp"
+#if !defined(_WIN32) && !defined(__APPLE__)
+
+
+#include <X11/Xproto.h>
+
+
+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 {
* 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;
}
if (image) {
const uint32_t *src = (const uint32_t *)ximage->data;
uint32_t *dst = (uint32_t*) image->start();
- for (int y = 0; y < h; ++y) {
- for (int x = 0; x < w; ++x) {
+ for (unsigned y = 0; y < h; ++y) {
+ for (unsigned x = 0; x < w; ++x) {
uint32_t bgra = src[x];
uint32_t rgba = (bgra & 0xff00ff00)
| ((bgra >> 16) & 0xff)