diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c index f31b1e054..32424fcbd 100644 --- a/Xext/panoramiXprocs.c +++ b/Xext/panoramiXprocs.c @@ -1105,6 +1105,10 @@ PanoramiXCopyArea(ClientPtr client) DixGetAttrAccess); if (rc != Success) return rc; + drawables[j]->pScreen->SourceValidate(drawables[j], 0, 0, + drawables[j]->width, + drawables[j]->height, + IncludeInferiors); } pitch = PixmapBytePad(width, drawables[0]->depth); @@ -2007,6 +2011,12 @@ PanoramiXGetImage(ClientPtr client) if (rc != Success) return rc; } + FOR_NSCREENS_FORWARD(i) { + drawables[i]->pScreen->SourceValidate(drawables[i], 0, 0, + drawables[i]->width, + drawables[i]->height, + IncludeInferiors); + } xgi = (xGetImageReply) { .type = X_Reply, diff --git a/Xext/shm.c b/Xext/shm.c index 506fd4df1..24c6b1087 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -655,6 +655,9 @@ ProcShmGetImage(ClientPtr client) visual = wVisual(((WindowPtr) pDraw)); if (pDraw->type == DRAWABLE_WINDOW) pVisibleRegion = &((WindowPtr) pDraw)->borderClip; + pDraw->pScreen->SourceValidate(pDraw, stuff->x, stuff->y, + stuff->width, stuff->height, + IncludeInferiors); } else { if (stuff->x < 0 || @@ -863,6 +866,12 @@ ProcPanoramiXShmGetImage(ClientPtr client) return rc; } } + FOR_NSCREENS_FORWARD(i) { + drawables[i]->pScreen->SourceValidate(drawables[i], 0, 0, + drawables[i]->width, + drawables[i]->height, + IncludeInferiors); + } xgi = (xShmGetImageReply) { .type = X_Reply, diff --git a/dix/dispatch.c b/dix/dispatch.c index 90a49dbf2..f20e1963e 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -2210,8 +2210,11 @@ DoGetImage(ClientPtr client, int format, Drawable drawable, return BadAlloc; WriteReplyToClient(client, sizeof(xGetImageReply), &xgi); - if (pDraw->type == DRAWABLE_WINDOW) + if (pDraw->type == DRAWABLE_WINDOW) { pVisibleRegion = &((WindowPtr) pDraw)->borderClip; + pDraw->pScreen->SourceValidate(pDraw, x, y, width, height, + IncludeInferiors); + } if (linesPerBuf == 0) { /* nothing to do */ diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c index 2858312de..c57d80db7 100644 --- a/glx/glxdriswrast.c +++ b/glx/glxdriswrast.c @@ -324,6 +324,7 @@ swrastGetImage(__DRIdrawable * draw, ScreenPtr pScreen = pDraw->pScreen; __GLXcontext *cx = lastGLContext; + pScreen->SourceValidate(pDraw, x, y, w, h, IncludeInferiors); pScreen->GetImage(pDraw, x, y, w, h, ZPixmap, ~0L, data); if (cx != lastGLContext) { lastGLContext = cx; diff --git a/render/render.c b/render/render.c index 7d94bd5ff..c376090ca 100644 --- a/render/render.c +++ b/render/render.c @@ -1492,6 +1492,11 @@ ProcRenderCreateCursor(ClientPtr client) return BadAlloc; } + /* what kind of maniac creates a cursor from a window picture though */ + if (pSrc->pDrawable->type == DRAWABLE_WINDOW) + pScreen->SourceValidate(pSrc->pDrawable, 0, 0, width, height, + IncludeInferiors); + if (pSrc->format == PICT_a8r8g8b8) { (*pScreen->GetImage) (pSrc->pDrawable, 0, 0, width, height, ZPixmap,