From d4f92a56883bf894636c3edd7a6b5379cc05efb6 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 26 Feb 2025 17:53:30 +0100 Subject: [PATCH] Revert "mi: drop obsolete miOverlaySetRootClip()" This reverts commit 00796cbf8cf8e2f613aaa8b2400b5c63cddd0e5e. Requested by Nvidia - their proprietary driver still needs it. Signed-off-by: Enrico Weigelt, metux IT consult Part-of: --- mi/mioverlay.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ mi/mioverlay.h | 2 ++ 2 files changed, 58 insertions(+) diff --git a/mi/mioverlay.c b/mi/mioverlay.c index 23cc2b366..0c1d79d70 100644 --- a/mi/mioverlay.c +++ b/mi/mioverlay.c @@ -54,3 +54,59 @@ typedef struct { Bool underlayMarked; Bool copyUnderlay; } miOverlayScreenRec, *miOverlayScreenPtr; + +static DevPrivateKeyRec miOverlayWindowKeyRec; + +#define miOverlayWindowKey (&miOverlayWindowKeyRec) + +static void MarkUnderlayWindow(WindowPtr); + +#define MIOVERLAY_GET_WINDOW_PRIVATE(pWin) ((miOverlayWindowPtr) \ + dixLookupPrivate(&(pWin)->devPrivates, miOverlayWindowKey)) +#define MIOVERLAY_GET_WINDOW_TREE(pWin) \ + (MIOVERLAY_GET_WINDOW_PRIVATE(pWin)->tree) + +#define MARK_UNDERLAY(w) MarkUnderlayWindow(w) + +/* We need this as an addition since the xf86 common code doesn't + know about the second tree which is static to this file. */ + +void +miOverlaySetRootClip(ScreenPtr pScreen, Bool enable) +{ + WindowPtr pRoot = pScreen->root; + miOverlayTreePtr pTree = MIOVERLAY_GET_WINDOW_TREE(pRoot); + + MARK_UNDERLAY(pRoot); + + if (enable) { + BoxRec box; + + box.x1 = 0; + box.y1 = 0; + box.x2 = pScreen->width; + box.y2 = pScreen->height; + + RegionReset(&pTree->borderClip, &box); + } + else + RegionEmpty(&pTree->borderClip); + + RegionBreak(&pTree->clipList); +} + +/****************************************************************/ + +static void +MarkUnderlayWindow(WindowPtr pWin) +{ + miOverlayTreePtr pTree = MIOVERLAY_GET_WINDOW_TREE(pWin); + + if (pTree->valdata) + return; + pTree->valdata = + (miOverlayValDataPtr) XNFalloc(sizeof(miOverlayValDataRec)); + pTree->valdata->oldAbsCorner.x = pWin->drawable.x; + pTree->valdata->oldAbsCorner.y = pWin->drawable.y; + pTree->valdata->borderVisible = NullRegion; +} diff --git a/mi/mioverlay.h b/mi/mioverlay.h index 857491dd3..68a88260a 100644 --- a/mi/mioverlay.h +++ b/mi/mioverlay.h @@ -9,4 +9,6 @@ typedef void (*miOverlayTransFunc) (ScreenPtr, int, BoxPtr); typedef Bool (*miOverlayInOverlayFunc) (WindowPtr); +extern _X_EXPORT void miOverlaySetRootClip(ScreenPtr, Bool); + #endif /* __MIOVERLAY_H */