xglcomp

annotate src/xerr.cc @ 10:be18500d76d1

better error message in xerr_debug
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 03 Feb 2016 03:55:52 +0200
parents 245dd960f0b3
children cb636a23f4f2
rev   line source
nuclear@9 1 #include <stack>
nuclear@9 2 #include "xerr.h"
nuclear@9 3 #include "logger.h"
nuclear@9 4
nuclear@9 5 static std::stack<xerr_handler_type> func_stack;
nuclear@9 6
nuclear@9 7 void push_xerr_handler(xerr_handler_type func)
nuclear@9 8 {
nuclear@9 9 func_stack.push(func);
nuclear@9 10 XSetErrorHandler(func);
nuclear@9 11 }
nuclear@9 12
nuclear@9 13 void pop_xerr_handler()
nuclear@9 14 {
nuclear@9 15 if(func_stack.empty()) {
nuclear@9 16 log_error("attempt to pop_xerr_handler with an empty stack\n");
nuclear@9 17 return;
nuclear@9 18 }
nuclear@9 19 xerr_handler_type prev = func_stack.top();
nuclear@9 20 func_stack.pop();
nuclear@9 21 XSetErrorHandler(prev);
nuclear@9 22 }
nuclear@9 23
nuclear@9 24 int xerr_debug(Display *dpy, XErrorEvent *err)
nuclear@9 25 {
nuclear@9 26 char errstr[512];
nuclear@9 27 XGetErrorText(dpy, err->error_code, errstr, sizeof errstr);
nuclear@10 28 printf("X error caught: \n%s (code: %u)\n", errstr, err->error_code);
nuclear@10 29 printf(" Failed request number: %lu (%u,%u)\n", err->serial,
nuclear@10 30 (unsigned int)err->request_code, (unsigned int)err->minor_code);
nuclear@10 31 printf(" Resource: %lx\n", err->resourceid);
nuclear@9 32 return 0;
nuclear@9 33 }
nuclear@9 34
nuclear@9 35 int xerr_ignore(Display *dpy, XErrorEvent *err)
nuclear@9 36 {
nuclear@9 37 return 0;
nuclear@9 38 }