Add Error Handler to fullscreen check
This commit is contained in:
parent
aa7a851fdd
commit
dd28e62c11
@ -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]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user