diff options
author | Daniel Stone <daniels@collabora.com> | 2014-04-03 18:22:50 +0100 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-04-03 16:40:03 -0700 |
commit | b851ca968b7cce6d1a6438c05d3d5c8832249704 (patch) | |
tree | 462dbf3754c25cae17359399a0b469d564894078 | |
parent | b4d0bec22c15930abf13a7fb9d684208ccd56b1d (diff) |
Add pScreen->NameWindowPixmap hook
This hook allows drivers to be notified when a pixmap gains a new ID.
(ABI break.)
Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | composite/compext.c | 13 | ||||
-rw-r--r-- | include/scrnintstr.h | 3 |
2 files changed, 15 insertions, 1 deletions
diff --git a/composite/compext.c b/composite/compext.c index a945f721f..cadedbd37 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -239,6 +239,7 @@ ProcCompositeNameWindowPixmap(ClientPtr client) WindowPtr pWin; CompWindowPtr cw; PixmapPtr pPixmap; + ScreenPtr pScreen; int rc; REQUEST(xCompositeNameWindowPixmapReq); @@ -246,6 +247,8 @@ ProcCompositeNameWindowPixmap(ClientPtr client) REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq); VERIFY_WINDOW(pWin, stuff->window, client, DixGetAttrAccess); + pScreen = pWin->drawable.pScreen; + if (!pWin->viewable) return BadMatch; @@ -255,7 +258,7 @@ ProcCompositeNameWindowPixmap(ClientPtr client) if (!cw) return BadMatch; - pPixmap = (*pWin->drawable.pScreen->GetWindowPixmap) (pWin); + pPixmap = (*pScreen->GetWindowPixmap) (pWin); if (!pPixmap) return BadMatch; @@ -270,6 +273,14 @@ ProcCompositeNameWindowPixmap(ClientPtr client) if (!AddResource(stuff->pixmap, RT_PIXMAP, (void *) pPixmap)) return BadAlloc; + if (pScreen->NameWindowPixmap) { + rc = pScreen->NameWindowPixmap(pWin, pPixmap, stuff->pixmap); + if (rc != Success) { + FreeResource(stuff->pixmap, RT_NONE); + return rc; + } + } + return Success; } diff --git a/include/scrnintstr.h b/include/scrnintstr.h index 5197c79f5..6acdadd7a 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -356,6 +356,8 @@ typedef Bool (*ReplaceScanoutPixmapProcPtr)(DrawablePtr, PixmapPtr, Bool); typedef WindowPtr (*XYToWindowProcPtr)(ScreenPtr pScreen, SpritePtr pSprite, int x, int y); +typedef int (*NameWindowPixmapProcPtr)(WindowPtr, PixmapPtr, CARD32); + typedef struct _Screen { int myNum; /* index of this instance in Screens[] */ ATOM id; @@ -466,6 +468,7 @@ typedef struct _Screen { SetWindowPixmapProcPtr SetWindowPixmap; GetScreenPixmapProcPtr GetScreenPixmap; SetScreenPixmapProcPtr SetScreenPixmap; + NameWindowPixmapProcPtr NameWindowPixmap; PixmapPtr pScratchPixmap; /* scratch pixmap "pool" */ |