misprite: Fix software cursor on multiple ScreenRecs
This commit is contained in:
		
							parent
							
								
									2c000f4980
								
							
						
					
					
						commit
						bb89fc2771
					
				|  | @ -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; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue