Ignore BadWindow errors
authorIain Patterson <me@iain.cx>
Sat, 7 Mar 2009 11:22:08 +0000 (11:22 +0000)
committerIain Patterson <me@iain.cx>
Sat, 7 Mar 2009 11:22:08 +0000 (11:22 +0000)
If a window has gone away since we queried it it's safe to ignore the
error.

pager.c

diff --git a/pager.c b/pager.c
index cab6b42..a8f0e8d 100644 (file)
--- 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();