Instead of using the "proper" DamageDamageRegion for reporting the first (virtual) damage in ProcDamageCreate that covers the borderClip of the drawable window, use a new function DamageInitialReport that uses damageReportDamage to do the work. This avoids sending all other damage listeners a full window update when a new damage object is created.
Signed-off-by: Erkki Seppälä <erkki.sepp...@vincit.fi> --- damageext/damageext.c | 2 +- miext/damage/damage.c | 12 ++++++++++++ miext/damage/damage.h | 5 +++++ 3 files changed, 18 insertions(+), 1 deletions(-) diff --git a/damageext/damageext.c b/damageext/damageext.c index cfef069..12e4bb1 100644 --- a/damageext/damageext.c +++ b/damageext/damageext.c @@ -223,7 +223,7 @@ ProcDamageCreate (ClientPtr client) if (pDrawable->type == DRAWABLE_WINDOW) { pRegion = &((WindowPtr) pDrawable)->borderClip; - DamageDamageRegion(pDrawable, pRegion); + DamageInitialDamage(pDrawable, pRegion); } return Success; diff --git a/miext/damage/damage.c b/miext/damage/damage.c index a3de044..a698d14 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -2115,6 +2115,18 @@ DamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDa damageReportDamagePostRendering (pDamage, pOldDamage, pRegion); } +void +DamageInitialDamage (DrawablePtr pDrawable, + const RegionPtr pRegion) +{ + ScreenPtr pScreen = pDrawable->pScreen; + damageScrPriv(pScreen); + drawableDamage(pDrawable); + + damageReportDamage(pDamage, pRegion); +} + + /* This call is very odd, i'm leaving it intact for API sake, but please don't use it. */ void DamageDamageRegion (DrawablePtr pDrawable, diff --git a/miext/damage/damage.h b/miext/damage/damage.h index 067016f..a3125ea 100644 --- a/miext/damage/damage.h +++ b/miext/damage/damage.h @@ -110,6 +110,11 @@ DamageRegionProcessPending (DrawablePtr pDrawable); extern _X_EXPORT void DamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion); +/* Call this when you create a new Damage and you wish to send an initial damage message (to it). */ +extern _X_EXPORT void +DamageInitialDamage (DrawablePtr pDrawable, + const RegionPtr pRegion); + /* Avoid using this call, it only exists for API compatibility. */ extern _X_EXPORT void DamageDamageRegion (DrawablePtr pDrawable, -- 1.7.0.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel