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 }
|