From 78294264814075f867420d88e406593dab73dc75 Mon Sep 17 00:00:00 2001 From: Reginald Kennedy Date: Wed, 18 Jul 2012 19:54:29 +0800 Subject: [PATCH] A better fix. Explicitly set event queue owner to XCB since it is Xlib by default. Xlib errors are now passed to the XCB event queue! --- spectrwm.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/spectrwm.c b/spectrwm.c index cd6ca79..cd62916 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -256,7 +256,6 @@ 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; @@ -7622,17 +7621,6 @@ 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[]) { @@ -7671,13 +7659,12 @@ 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"); + XSetEventQueueOwner(display, XCBOwnsEventQueue); + xcb_prefetch_extension_data(conn, &xcb_randr_id); xfd = xcb_get_file_descriptor(conn); -- 1.7.10.4