diff options
author | uint23 <[email protected]> | 2025-04-17 14:03:35 +0100 |
---|---|---|
committer | uint23 <[email protected]> | 2025-04-17 14:03:35 +0100 |
commit | a8dce8bdcd9c2445e186253b8e5206ac1eb5bf61 (patch) | |
tree | b66d41289682a1f7cffeded110e8b31d9b26e965 | |
parent | a6fe40e67b8d0dbde3cac2a0be913c7dd4df9643 (diff) |
proper err handling
-rw-r--r-- | src/sxwm.c | 22 |
1 files changed, 19 insertions, 3 deletions
@@ -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; } |