dix: WindowsRestructured() calls CheckMotion() on all devices

mi:	core pointer was checked twice in miSpriteReportDamage,
	miSpriteInstallColormap, miSpriteStoreColors, miSpriteSaveDoomedAreas
	and miSpriteRealiseCursor
	using damage bug (see comment in file) to avoid artefacts
This commit is contained in:
Peter Hutterer 2006-11-21 20:31:30 +10:30 • committed by Peter Hutterer
commit efd4f3c6ff
4 changed files with 141 additions and 103 deletions

View file

@ -97,17 +97,26 @@ typedef struct {
#define MASK_COLOR 1
static int damageRegister = 0;
/*
* FIXME: MPX uses a bug at the moment. The semaphore system in place will
* call miSpriteIsUpTRUE multiple times and thus DamageUnregister() will never
* be called in miSpriteIsUpFALSE.
* This gets rid of cursor rendering artefacts but I don't know how this
* affects applications.
* Without any semaphore system in place DamageRegister will be called twice
* and segfault.
*/
#define miSpriteIsUpTRUE(pDevCursor, pScreen, pScreenPriv) if (!pDevCursor->isUp) { \
pDevCursor->isUp = TRUE; \
if (!damageRegister ) { \
damageRegister++; \
DamageRegister (&(*pScreen->GetScreenPixmap) (pScreen)->drawable, pScreenPriv->pDamage); \
} \
damageRegister++; \
}
#define miSpriteIsUpFALSE(pDevCursor, pScreen, pScreenPriv) if (pDevCursor->isUp) { \
if (damageRegister) { \
damageRegister--; \
damageRegister--; \
if (!damageRegister) { \
DamageUnregister (&(*pScreen->GetScreenPixmap) (pScreen)->drawable, pScreenPriv->pDamage); \
} \
pDevCursor->isUp = FALSE; \