misprite: Fix software cursor on multiple ScreenRecs

This commit is contained in:
Adam Jackson 2009-03-27 12:36:42 -04:00
parent 2c000f4980
commit bb89fc2771
2 changed files with 7 additions and 11 deletions

View File

@ -56,8 +56,6 @@ in this Software without prior written authorization from The Open Group.
#endif #endif
# include "damage.h" # include "damage.h"
#define SPRITE_DEBUG_ENABLE 0 #define SPRITE_DEBUG_ENABLE 0
#if SPRITE_DEBUG_ENABLE #if SPRITE_DEBUG_ENABLE
#define SPRITE_DEBUG(x) ErrorF x #define SPRITE_DEBUG(x) ErrorF x
@ -65,29 +63,26 @@ in this Software without prior written authorization from The Open Group.
#define SPRITE_DEBUG(x) #define SPRITE_DEBUG(x)
#endif #endif
#define MISPRITE(dev) \ #define MISPRITE(dev) \
((DevHasCursor(dev)) ? \ ((DevHasCursor(dev)) ? \
(miCursorInfoPtr)dixLookupPrivate(&dev->devPrivates, miSpriteDevPrivatesKey) : \ (miCursorInfoPtr)dixLookupPrivate(&dev->devPrivates, miSpriteDevPrivatesKey) : \
(miCursorInfoPtr)dixLookupPrivate(&dev->u.master->devPrivates, miSpriteDevPrivatesKey)) (miCursorInfoPtr)dixLookupPrivate(&dev->u.master->devPrivates, miSpriteDevPrivatesKey))
static int damageRegister = 0;
static void static void
miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv) miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
{ {
if (damageRegister) { if (pScreenPriv->damageRegistered) {
DamageUnregister (&(pScreen->GetScreenPixmap(pScreen)->drawable), DamageUnregister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
pScreenPriv->pDamage); pScreenPriv->pDamage);
damageRegister = 0; pScreenPriv->damageRegistered = 0;
} }
} }
static void static void
miSpriteEnableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv) miSpriteEnableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
{ {
if (!damageRegister) { if (!pScreenPriv->damageRegistered) {
damageRegister = 1; pScreenPriv->damageRegistered = 1;
DamageRegister (&(pScreen->GetScreenPixmap(pScreen)->drawable), DamageRegister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
pScreenPriv->pDamage); pScreenPriv->pDamage);
} }
@ -269,6 +264,8 @@ miSpriteInitialize (ScreenPtr pScreen,
pScreenPriv->colors[MASK_COLOR].red = 0; pScreenPriv->colors[MASK_COLOR].red = 0;
pScreenPriv->colors[MASK_COLOR].green = 0; pScreenPriv->colors[MASK_COLOR].green = 0;
pScreenPriv->colors[MASK_COLOR].blue = 0; pScreenPriv->colors[MASK_COLOR].blue = 0;
pScreenPriv->damageRegistered = 0;
dixSetPrivate(&pScreen->devPrivates, miSpriteScreenKey, pScreenPriv); dixSetPrivate(&pScreen->devPrivates, miSpriteScreenKey, pScreenPriv);
pScreen->CloseScreen = miSpriteCloseScreen; pScreen->CloseScreen = miSpriteCloseScreen;
@ -282,8 +279,6 @@ miSpriteInitialize (ScreenPtr pScreen,
pScreen->BlockHandler = miSpriteBlockHandler; pScreen->BlockHandler = miSpriteBlockHandler;
damageRegister = 0;
return TRUE; return TRUE;
} }

View File

@ -87,6 +87,7 @@ typedef struct {
VisualPtr pVisual; VisualPtr pVisual;
miSpriteCursorFuncPtr funcs; miSpriteCursorFuncPtr funcs;
DamagePtr pDamage; /* damage tracking structure */ DamagePtr pDamage; /* damage tracking structure */
Bool damageRegistered;
} miSpriteScreenRec, *miSpriteScreenPtr; } miSpriteScreenRec, *miSpriteScreenPtr;
#define SOURCE_COLOR 0 #define SOURCE_COLOR 0