summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruint23 <[email protected]>2025-04-17 14:03:35 +0100
committeruint23 <[email protected]>2025-04-17 14:03:35 +0100
commita8dce8bdcd9c2445e186253b8e5206ac1eb5bf61 (patch)
treeb66d41289682a1f7cffeded110e8b31d9b26e965
parenta6fe40e67b8d0dbde3cac2a0be913c7dd4df9643 (diff)
proper err handling
-rw-r--r--src/sxwm.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/sxwm.c b/src/sxwm.c
index 14b13f2..2f0d0e6 100644
--- a/src/sxwm.c
+++ b/src/sxwm.c
@@ -21,7 +21,9 @@
#include <string.h>
#include <unistd.h>
+#include <X11/Xatom.h>
#include <X11/Xlib.h>
+#include <X11/Xproto.h>
#include <X11/XKBlib.h>
#include "defs.h"
@@ -635,9 +637,23 @@ update_borders(void)
static int
xerr(Display *dpy, XErrorEvent *ee)
{
- fprintf(stderr, "sxwm: fatal error\nrequest code:%d\nerror code:%d\n",
- ee->request_code, ee->error_code);
- return 0;
+ if (ee->error_code == BadWindow
+ || ee->error_code == BadDrawable
+ || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
+ || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch))
+ return 0;
+
+ char buf[256];
+ XGetErrorText(dpy, ee->error_code, buf, sizeof(buf));
+ fprintf(stderr,
+ "sxwm: X error:\n"
+ " request code: %d\n"
+ " error code: %d (%s)\n"
+ " resource id: 0x%lx\n",
+ ee->request_code,
+ ee->error_code, buf,
+ ee->resourceid
+ ); return 0;
if (dpy && ee) return 0;
}