From dd28e62c117ab091527bfd367a4e04e8128f65f1 Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Tue, 21 Nov 2017 10:51:30 +0100 Subject: [PATCH] Add Error Handler to fullscreen check --- src/x11/screen.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/x11/screen.c b/src/x11/screen.c index b232e04..c350236 100644 --- a/src/x11/screen.c +++ b/src/x11/screen.c @@ -192,6 +192,24 @@ bool have_fullscreen_window(void) return window_is_fullscreen(get_focused_window()); } +/** + * X11 ErrorHandler to mainly discard BadWindow parameter error + */ +static int XErrorHandlerFullscreen(Display *display, XErrorEvent *e) +{ + /* Ignore BadWindow errors. Window may have been gone */ + if (e->error_code == BadWindow) { + return 0; + } + + char err_buf[BUFSIZ]; + XGetErrorText(display, e->error_code, err_buf, BUFSIZ); + fputs(err_buf, stderr); + fputs("\n", stderr); + + return 0; +} + /* see screen.h */ bool window_is_fullscreen(Window window) { @@ -205,6 +223,9 @@ bool window_is_fullscreen(Window window) return false; } + XFlush(xctx.dpy); + XSetErrorHandler(XErrorHandlerFullscreen); + Atom actual_type_return; int actual_format_return; unsigned long bytes_after_return; @@ -224,6 +245,10 @@ bool window_is_fullscreen(Window window) &bytes_after_return, &prop_to_return); + XFlush(xctx.dpy); + XSync(xctx.dpy, false); + XSetErrorHandler(NULL); + if (result == Success) { for(int i = 0; i < n_items; i++) { char *atom = XGetAtomName(xctx.dpy, ((Atom*)prop_to_return)[i]);