Index: ChangeLog =================================================================== RCS file: /cvs/xorg/xc/ChangeLog,v retrieving revision 1.245 diff -u -p -r1.245 ChangeLog --- ChangeLog 12 Aug 2004 01:03:06 -0000 1.245 +++ ChangeLog 12 Aug 2004 01:46:32 -0000 @@ -1,3 +1,11 @@ +2004-08-12 Kristian Høgsberg + + * programs/Xserver/miext/damage/damage.c (damageCopyPlane) + (damageCopyArea): + Add call to SourceValidate() when pDst == pSrc, so misprite.c get + a chance to remove the sprite before the area is copied. The + drivers handle pDst != pSrc (#1030). + 2004-08-11 Adam Jackson * programs/Xserver/hw/xfree86/drivers/ati/r128_chipset.h: Index: programs/Xserver/miext/damage/damage.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/miext/damage/damage.c,v retrieving revision 1.6 diff -u -p -r1.6 damage.c --- programs/Xserver/miext/damage/damage.c 11 Aug 2004 22:40:14 -0000 1.6 +++ programs/Xserver/miext/damage/damage.c 12 Aug 2004 01:46:52 -0000 @@ -728,6 +728,12 @@ damageCopyArea(DrawablePtr pSrc, RegionPtr ret; DAMAGE_GC_OP_PROLOGUE(pGC, pDst); + /* The driver will only call SourceValidate() when pSrc != pDst, + * but the software sprite (misprite.c) always need to know when a + * drawable is copied so it can remove the sprite. See #1030. */ + if ((pSrc == pDst) && pSrc->pScreen->SourceValidate) + (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height); + if (checkGCDamage (pDst, pGC)) { BoxRec box; @@ -762,6 +768,13 @@ damageCopyPlane(DrawablePtr pSrc, { RegionPtr ret; DAMAGE_GC_OP_PROLOGUE(pGC, pDst); + + /* The driver will only call SourceValidate() when pSrc != pDst, + * but the software sprite (misprite.c) always need to know when a + * drawable is copied so it can remove the sprite. See #1030. */ + if ((pSrc == pDst) && pSrc->pScreen->SourceValidate) + (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height); + if (checkGCDamage (pDst, pGC)) { BoxRec box;