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

Reply via email to