diff options
author | Keith Packard <keithp@keithp.com> | 2016-09-25 14:19:08 +0300 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2016-09-28 15:25:07 -0400 |
commit | 6c6f09aac7f1d1367a042087b7681c7fdf1d1e0f (patch) | |
tree | 77e88249fd2d327116a2025a366baedecac9e9f4 | |
parent | 380c2ca25ec4dd330f938e382ff4af60bc253785 (diff) |
xace: Don't censor window borders
GetImage is allowed to return window border contents, so don't remove
that from the returned image.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | Xext/xace.c | 13 | ||||
-rw-r--r-- | dix/dispatch.c | 10 |
2 files changed, 8 insertions, 15 deletions
diff --git a/Xext/xace.c b/Xext/xace.c index a3a83a20c..f8f8d139b 100644 --- a/Xext/xace.c +++ b/Xext/xace.c @@ -236,16 +236,15 @@ XaceCensorImage(ClientPtr client, BoxRec imageBox; int nRects; - imageBox.x1 = x; - imageBox.y1 = y; - imageBox.x2 = x + w; - imageBox.y2 = y + h; + imageBox.x1 = pDraw->x + x; + imageBox.y1 = pDraw->y + y; + imageBox.x2 = pDraw->x + x + w; + imageBox.y2 = pDraw->y + y + h; RegionInit(&imageRegion, &imageBox, 1); RegionNull(&censorRegion); /* censorRegion = imageRegion - visibleRegion */ RegionSubtract(&censorRegion, &imageRegion, pVisibleRegion); - RegionTranslate(&censorRegion, -x, -y); nRects = RegionNumRects(&censorRegion); if (nRects > 0) { /* we have something to censor */ GCPtr pScratchGC = NULL; @@ -265,8 +264,8 @@ XaceCensorImage(ClientPtr client, goto failSafe; } for (pBox = RegionRects(&censorRegion), i = 0; i < nRects; i++, pBox++) { - pRects[i].x = pBox->x1; - pRects[i].y = pBox->y1; + pRects[i].x = pBox->x1 - imageBox.x1; + pRects[i].y = pBox->y1 - imageBox.y1; pRects[i].width = pBox->x2 - pBox->x1; pRects[i].height = pBox->y2 - pBox->y1; } diff --git a/dix/dispatch.c b/dix/dispatch.c index adcc9cffd..e11137760 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -2187,12 +2187,8 @@ DoGetImage(ClientPtr client, int format, Drawable drawable, return BadAlloc; WriteReplyToClient(client, sizeof(xGetImageReply), &xgi); - if (pDraw->type == DRAWABLE_WINDOW) { - pVisibleRegion = NotClippedByChildren((WindowPtr) pDraw); - if (pVisibleRegion) { - RegionTranslate(pVisibleRegion, -pDraw->x, -pDraw->y); - } - } + if (pDraw->type == DRAWABLE_WINDOW) + pVisibleRegion = &((WindowPtr) pDraw)->borderClip; if (linesPerBuf == 0) { /* nothing to do */ @@ -2251,8 +2247,6 @@ DoGetImage(ClientPtr client, int format, Drawable drawable, } } } - if (pVisibleRegion) - RegionDestroy(pVisibleRegion); free(pBuf); return Success; } |