From a801164bf5c736ea45edabf8f6de456586b314a0 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 25 Sep 2024 15:29:07 +0200 Subject: [PATCH] (!1714) composite: use window position notify hook Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new window position notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult --- composite/compinit.c | 6 ++---- composite/compint.h | 4 +--- composite/compwindow.c | 16 ++-------------- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/composite/compinit.c b/composite/compinit.c index c06284963..daf4a609d 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -78,10 +78,10 @@ compCloseScreen(ScreenPtr pScreen) pScreen->RealizeWindow = cs->RealizeWindow; pScreen->CreateWindow = cs->CreateWindow; pScreen->CopyWindow = cs->CopyWindow; - pScreen->PositionWindow = cs->PositionWindow; pScreen->SourceValidate = cs->SourceValidate; dixScreenUnhookWindowDestroy(pScreen, compWindowDestroy, NULL); + dixScreenUnhookWindowPosition(pScreen, compWindowPosition, NULL); free(cs); dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL); @@ -370,9 +370,7 @@ compScreenInit(ScreenPtr pScreen) pScreen->backingStoreSupport = WhenMapped; dixScreenHookWindowDestroy(pScreen, compWindowDestroy, NULL); - - cs->PositionWindow = pScreen->PositionWindow; - pScreen->PositionWindow = compPositionWindow; + dixScreenHookWindowPosition(pScreen, compWindowPosition, NULL); cs->CopyWindow = pScreen->CopyWindow; pScreen->CopyWindow = compCopyWindow; diff --git a/composite/compint.h b/composite/compint.h index aeb43a4bf..6ccce3f82 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -125,7 +125,6 @@ typedef struct _CompImplicitRedirectException { } CompImplicitRedirectException; typedef struct _CompScreen { - PositionWindowProcPtr PositionWindow; CopyWindowProcPtr CopyWindow; CreateWindowProcPtr CreateWindow; RealizeWindowProcPtr RealizeWindow; @@ -279,8 +278,7 @@ void Bool compCheckRedirect(WindowPtr pWin); -Bool - compPositionWindow(WindowPtr pWin, int x, int y); +void compWindowPosition(ScreenPtr pScreen, WindowPtr pWin, void *arg, int32_t x, int32_t y); Bool compRealizeWindow(WindowPtr pWin); diff --git a/composite/compwindow.c b/composite/compwindow.c index 43884188a..2e7ce41c0 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -224,14 +224,8 @@ updateOverlayWindow(ScreenPtr pScreen) return Success; } -Bool -compPositionWindow(WindowPtr pWin, int x, int y) +void compWindowPosition(ScreenPtr pScreen, WindowPtr pWin, void *arg, int32_t x, int32_t y) { - ScreenPtr pScreen = pWin->drawable.pScreen; - CompScreenPtr cs = GetCompScreen(pScreen); - Bool ret = TRUE; - - pScreen->PositionWindow = cs->PositionWindow; /* * "Shouldn't need this as all possible places should be wrapped * @@ -255,14 +249,8 @@ compPositionWindow(WindowPtr pWin, int x, int y) } } - if (!(*pScreen->PositionWindow) (pWin, x, y)) - ret = FALSE; - cs->PositionWindow = pScreen->PositionWindow; - pScreen->PositionWindow = compPositionWindow; compCheckTree(pWin->drawable.pScreen); - if (updateOverlayWindow(pScreen) != Success) - ret = FALSE; - return ret; + updateOverlayWindow(pScreen); } Bool