From 6b514cb540c0ec6e6c8a8b8a07f466d1dfbb372f Mon Sep 17 00:00:00 2001 From: Reginald Kennedy Date: Wed, 18 Jul 2012 09:10:47 +0800 Subject: [PATCH] Fix Xlib exiting on error. --- spectrwm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spectrwm.c b/spectrwm.c index 5667102..cd6ca79 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -256,6 +256,7 @@ volatile sig_atomic_t running = 1; volatile sig_atomic_t restart_wm = 0; int outputs = 0; /*int last_focus_event = FocusOut;*/ +int (*xerrorxlib)(Display *, XErrorEvent *); int other_wm; int ss_enabled = 0; int xrandr_support; @@ -7621,6 +7622,17 @@ event_handle(xcb_generic_event_t *evt) screenchange((void *)evt); } +xerror(Display *d, XErrorEvent *ee) +{ +#ifdef SWM_DEBUG + char error_text[1024]; + XGetErrorText(display, ee->error_code, error_text, sizeof(error_text)); + DNPRINTF(SWM_D_MISC, "xerror: error_code: %u, error_text: %s\n", + ee->error_code, error_text); +#endif + return -1; +} + int main(int argc, char *argv[]) { @@ -7659,6 +7671,9 @@ main(int argc, char *argv[]) if (!(display = XOpenDisplay(0))) errx(1, "can not open display"); + /* prevent xlib from exiting on an error */ + xerrorxlib = XSetErrorHandler(xerror); + conn = XGetXCBConnection(display); if (xcb_connection_has_error(conn)) errx(1, "can not get XCB connection"); -- 1.7.10.4