From 7cec174ea28986ff9f0de1b9a5e7ec19378bba0f Mon Sep 17 00:00:00 2001 From: Iain Patterson Date: Sat, 7 Mar 2009 11:22:08 +0000 Subject: [PATCH] Ignore BadWindow errors If a window has gone away since we queried it it's safe to ignore the error. --- pager.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pager.c b/pager.c index cab6b42..a8f0e8d 100644 --- a/pager.c +++ b/pager.c @@ -15,6 +15,26 @@ static Atom num_desktops_atom, current_desktop_atom, client_list_atom, client_de static Atom shaded_state, skip_pager_state, hidden_state; static long desktop = -1; +int error_handler(Display *display, XErrorEvent *event) { + char buffer[512]; + int length; + + switch (event->error_code) { + case BadWindow: + /* The window may have gone away since we queried the window manager. */ + break; + + default: + if (XGetErrorText(display, event->error_code, buffer, sizeof(buffer))) { + fprintf(stderr, "%s\n", buffer); + exit(100); + } + break; + } + + return 0; +} + void setup_atom(Atom *atom, const char *prop) { *atom = XInternAtom(DADisplay, prop, True); if (*atom == None) exit(111); @@ -231,6 +251,7 @@ int main(int argc, char **argv) { exit(111); } + XSetErrorHandler(error_handler); setup_GCs(); DAShow(); DAEventLoop(); -- 2.7.4