miext: shadow: use CloseScreen hook

Wrapping ScreenRec's function pointers is problematic for many reasons,
so use the new screen close notify hook instead.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-04-27 17:45:06 +02:00
parent 46f2a97c18
commit 1bc857d30f
2 changed files with 8 additions and 8 deletions

View File

@ -23,8 +23,10 @@
#include <dix-config.h>
#include <stdlib.h>
#include <X11/X.h>
#include "dix/screen_hooks_priv.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "dixfontstr.h"
@ -93,19 +95,17 @@ shadowGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
wrap(pBuf, pScreen, GetImage);
}
static Bool
shadowCloseScreen(ScreenPtr pScreen)
static void shadowCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
{
shadowBuf(pScreen);
dixScreenUnhookClose(pScreen, shadowCloseScreen);
shadowBuf(pScreen);
unwrap(pBuf, pScreen, GetImage);
unwrap(pBuf, pScreen, CloseScreen);
unwrap(pBuf, pScreen, BlockHandler);
shadowRemove(pScreen, pBuf->pPixmap);
DamageDestroy(pBuf->pDamage);
dixDestroyPixmap(pBuf->pPixmap, 0);
free(pBuf);
return pScreen->CloseScreen(pScreen);
}
Bool
@ -130,7 +130,8 @@ shadowSetup(ScreenPtr pScreen)
return FALSE;
}
wrap(pBuf, pScreen, CloseScreen);
dixScreenHookClose(pScreen, shadowCloseScreen);
wrap(pBuf, pScreen, GetImage);
wrap(pBuf, pScreen, BlockHandler);
pBuf->update = 0;

View File

@ -53,7 +53,6 @@ typedef struct _shadowBuf {
/* screen wrappers */
GetImageProcPtr GetImage;
CloseScreenProcPtr CloseScreen;
ScreenBlockHandlerProcPtr BlockHandler;
} shadowBufRec;