@@ -, +, @@ Replace usage of DamageRegionAppend with DamageDamageRegion to fix reportAfter. In all these cases, any rendering implied by this damage has already occurred, and we want to get the damage out to the client. Some of the DamageRegionAppend calls were explicitly telling damage to flush the reportAfter damage out, but not all. Bug #30260. Fixes the compiz wallpaper plugin with client damage changed to reportAfter. Signed-off-by: Eric Anholt Reviewed-by: Keith Packard Signed-off-by: Keith Packard (cherry picked from commit f36153e3ef6b13a87d016caab09cc9be274b0dd5) --- xorg-server-1.9.2/composite/compalloc.c 2010-06-06 23:37:03.000000000 +0200 +++ xorg-server-1.9.2/composite/compalloc.c 2010-11-23 20:07:18.000000000 +0100 @@ -238,7 +238,7 @@ compFreeClientWindow (WindowPtr pWin, XI DamageRegister (&pWin->drawable, cw->damage); cw->damageRegistered = TRUE; pWin->redirectDraw = RedirectDrawAutomatic; - DamageRegionAppend(&pWin->drawable, &pWin->borderSize); + DamageDamageRegion(&pWin->drawable, &pWin->borderSize); } if (wasMapped && !pWin->mapped) { --- xorg-server-1.9.2/composite/compwindow.c 2010-09-11 23:20:51.000000000 +0200 +++ xorg-server-1.9.2/composite/compwindow.c 2010-11-23 20:07:18.000000000 +0100 @@ -519,7 +519,7 @@ compCopyWindow (WindowPtr pWin, DDXPoint RegionTranslate(prgnSrc, pWin->drawable.x - ptOldOrg.x, pWin->drawable.y - ptOldOrg.y); - DamageRegionAppend(&pWin->drawable, prgnSrc); + DamageDamageRegion(&pWin->drawable, prgnSrc); } cs->CopyWindow = pScreen->CopyWindow; pScreen->CopyWindow = compCopyWindow; @@ -598,7 +598,7 @@ compSetRedirectBorderClip (WindowPtr pWi /* * Report that as damaged so it will be redrawn */ - DamageRegionAppend(&pWin->drawable, &damage); + DamageDamageRegion(&pWin->drawable, &damage); RegionUninit(&damage); /* * Save the new border clip region --- xorg-server-1.9.2/damageext/damageext.c 2010-08-13 10:02:40.000000000 +0200 +++ xorg-server-1.9.2/damageext/damageext.c 2010-11-23 20:07:18.000000000 +0100 @@ -223,7 +223,7 @@ ProcDamageCreate (ClientPtr client) if (pDrawable->type == DRAWABLE_WINDOW) { pRegion = &((WindowPtr) pDrawable)->borderClip; - DamageRegionAppend(pDrawable, pRegion); + DamageDamageRegion(pDrawable, pRegion); } return Success; @@ -293,7 +293,7 @@ ProcDamageAdd (ClientPtr client) * screen coordinates like damage expects. */ RegionTranslate(pRegion, pDrawable->x, pDrawable->y); - DamageRegionAppend(pDrawable, pRegion); + DamageDamageRegion(pDrawable, pRegion); RegionTranslate(pRegion, -pDrawable->x, -pDrawable->y); return Success; --- xorg-server-1.9.2/exa/exa.c 2010-07-17 21:36:54.000000000 +0200 +++ xorg-server-1.9.2/exa/exa.c 2010-11-23 20:07:18.000000000 +0100 @@ -159,8 +159,7 @@ exaPixmapDirty (PixmapPtr pPix, int x1, return; RegionInit(®ion, &box, 1); - DamageRegionAppend(&pPix->drawable, ®ion); - DamageRegionProcessPending(&pPix->drawable); + DamageDamageRegion(&pPix->drawable, ®ion); RegionUninit(®ion); } --- xorg-server-1.9.2/glx/glxdri.c 2010-07-17 21:36:54.000000000 +0200 +++ xorg-server-1.9.2/glx/glxdri.c 2010-11-23 20:07:18.000000000 +0100 @@ -834,9 +834,7 @@ static void __glXReportDamage(__DRIdrawa RegionInit(®ion, (BoxPtr) rects, num_rects); RegionTranslate(®ion, pDraw->x, pDraw->y); - DamageRegionAppend(pDraw, ®ion); - /* This is wrong, this needs a seperate function. */ - DamageRegionProcessPending(pDraw); + DamageDamageRegion(pDraw, ®ion); RegionUninit(®ion); __glXleaveServer(GL_FALSE); --- xorg-server-1.9.2/hw/xfree86/modes/xf86Rotate.c 2010-06-06 23:37:03.000000000 +0200 +++ xorg-server-1.9.2/hw/xfree86/modes/xf86Rotate.c 2010-11-23 20:07:18.000000000 +0100 @@ -168,7 +168,7 @@ xf86CrtcDamageShadow (xf86CrtcPtr crtc) if (damage_box.x2 > pScreen->width) damage_box.x2 = pScreen->width; if (damage_box.y2 > pScreen->height) damage_box.y2 = pScreen->height; RegionInit(&damage_region, &damage_box, 1); - DamageRegionAppend (&(*pScreen->GetScreenPixmap)(pScreen)->drawable, + DamageDamageRegion (&(*pScreen->GetScreenPixmap)(pScreen)->drawable, &damage_region); RegionUninit(&damage_region); crtc->shadowClear = TRUE;