From cfa9171465351f89e99a28f3dcd60d7af9bf6730 Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Wed, 27 Jan 2021 11:04:46 +1100 Subject: [PATCH] [client] x11: don't report borders if in fullscreen mode --- client/displayservers/X11/x11.c | 39 ++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/client/displayservers/X11/x11.c b/client/displayservers/X11/x11.c index 43e2bf15..576dd6bd 100644 --- a/client/displayservers/X11/x11.c +++ b/client/displayservers/X11/x11.c @@ -57,6 +57,8 @@ struct X11DSState bool keyboardGrabbed; bool entered; bool focused; + bool fullscreen; + struct Rect rect; struct Border border; @@ -447,7 +449,14 @@ static int x11EventThread(void * unused) x11.rect.h = xe.xconfigure.height; app_updateWindowPos(x, y); - app_handleResizeEvent(x11.rect.w, x11.rect.h, x11.border); + + if (x11.fullscreen) + { + struct Border border = {0}; + app_handleResizeEvent(x11.rect.w, x11.rect.h, border); + } + else + app_handleResizeEvent(x11.rect.w, x11.rect.h, x11.border); break; } @@ -479,6 +488,31 @@ static int x11EventThread(void * unused) xe.xproperty.state != PropertyNewValue) break; + if (xe.xproperty.atom == x11.aNetWMState) + { + Atom type; + int fmt; + unsigned long num, bytes; + unsigned char *data; + + if (XGetWindowProperty(x11.display, x11.window, + x11.aNetWMState, 0, ~0L, False, AnyPropertyType, + &type, &fmt, &num, &bytes, &data) != Success) + break; + + bool fullscreen = false; + for(int i = 0; i < num; ++i) + { + Atom prop = ((Atom *)data)[i]; + if (prop == x11.aNetWMStateFullscreen) + fullscreen = true; + } + + x11.fullscreen = fullscreen; + XFree(data); + break; + } + if (xe.xproperty.atom == x11.aNetFrameExtents) { Atom type; @@ -969,6 +1003,9 @@ static void x11SetWindowSize(int w, int h) static void x11SetFullscreen(bool fs) { + if (x11.fullscreen == fs) + return; + XEvent e = { .xclient = {