From 504bf02855184bdc0f1f6d2e7eb0fa6d00baf9ba Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Tue, 3 Aug 2021 07:49:59 +1000 Subject: [PATCH] [client] x11: provide an empty rect region to XPresentPixmap Providing None informs the comppositor that there is full screen damage, instead we provide an empty rectangle to prevent this behaviour. --- client/displayservers/X11/x11.c | 11 ++++++----- client/displayservers/X11/x11.h | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/client/displayservers/X11/x11.c b/client/displayservers/X11/x11.c index e4d1aed2..ec8d707b 100644 --- a/client/displayservers/X11/x11.c +++ b/client/displayservers/X11/x11.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -89,10 +88,10 @@ static void x11DoPresent(void) x11.window, x11.presentPixmap, x11.presentSerial++, - 0, // valid - 0, // update - -1, // x_off, - -1, // y_off, + x11.presentRegion, // valid + x11.presentRegion, // update + 0, // x_off, + 0, // y_off, 0, // target_crtc None, // wait_fence None, // idle_fence @@ -519,6 +518,8 @@ static bool x11Init(const LG_DSInitParams params) XPresentQueryExtension(x11.display, &x11.xpresentOp, &event, &error); x11.presentPixmap = XCreatePixmap(x11.display, x11.window, 1, 1, 24); XPresentSelectInput(x11.display, x11.window, PresentCompleteNotifyMask); + x11.presentRegion = XFixesCreateRegion(x11.display, &(XRectangle){0}, 1); + XMapWindow(x11.display, x11.window); XFlush(x11.display); diff --git a/client/displayservers/X11/x11.h b/client/displayservers/X11/x11.h index f45707ef..27c12445 100644 --- a/client/displayservers/X11/x11.h +++ b/client/displayservers/X11/x11.h @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -42,6 +43,7 @@ struct X11DSState uint32_t presentSerial; Pixmap presentPixmap; + XserverRegion presentRegion; LGEvent * frameEvent; LGThread * eventThread;