Create separate private key for midispcur cursor bits
The CursorScreenKey array is supposed to be used by the DDX for cursor private data, but midispcur was abusing it to hold cursor bits private information. Create a separate set of privates for the dispcur cursor bits information. This also renames the device private index and macros to better reflect their usage: miDCSpriteKey -> miDCDeviceKey MIDCBUFFER -> miGetDCDevice Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
		
							parent
							
								
									431781a921
								
							
						
					
					
						commit
						c865a24401
					
				|  | @ -59,9 +59,13 @@ static DevPrivateKey miDCScreenKey = &miDCScreenKeyIndex; | |||
| 
 | ||||
| static Bool	miDCCloseScreen(int index, ScreenPtr pScreen); | ||||
| 
 | ||||
| /* per bits per-screen private data */ | ||||
| static int miDCCursorBitsKeyIndex[MAXSCREENS]; | ||||
| #define miDCCursorBitsKey(screen)	(&miDCCursorBitsKeyIndex[(screen)->myNum]) | ||||
| 
 | ||||
| /* per device per-screen private data */ | ||||
| static int miDCSpriteKeyIndex[MAXSCREENS]; | ||||
| static DevPrivateKey miDCSpriteKey = miDCSpriteKeyIndex; | ||||
| static int miDCDeviceKeyIndex[MAXSCREENS]; | ||||
| #define miDCDeviceKey(screen)		(&miDCDeviceKeyIndex[(screen)->myNum]) | ||||
| 
 | ||||
| typedef struct { | ||||
|     GCPtr	    pSourceGC, pMaskGC; | ||||
|  | @ -72,10 +76,10 @@ typedef struct { | |||
| #endif | ||||
| } miDCBufferRec, *miDCBufferPtr; | ||||
| 
 | ||||
| #define MIDCBUFFER(dev, screen) \ | ||||
| #define miGetDCDevice(dev, screen) \ | ||||
|  ((DevHasCursor(dev)) ? \ | ||||
|   (miDCBufferPtr)dixLookupPrivate(&dev->devPrivates, miDCSpriteKey + (screen)->myNum) : \ | ||||
|   (miDCBufferPtr)dixLookupPrivate(&dev->u.master->devPrivates, miDCSpriteKey + (screen)->myNum)) | ||||
|   (miDCBufferPtr)dixLookupPrivate(&dev->devPrivates, miDCDeviceKey(screen)) : \ | ||||
|   (miDCBufferPtr)dixLookupPrivate(&dev->u.master->devPrivates, miDCDeviceKey(screen))) | ||||
| 
 | ||||
| /* 
 | ||||
|  * The core pointer buffer will point to the index of the virtual core pointer | ||||
|  | @ -133,7 +137,7 @@ Bool | |||
| miDCRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) | ||||
| { | ||||
|     if (pCursor->bits->refcnt <= 1) | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), NULL); | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, miDCCursorBitsKey(pScreen), NULL); | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
|  | @ -232,7 +236,7 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor) | |||
| 	    free((pointer) pPriv); | ||||
| 	    return NULL; | ||||
| 	} | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), pPriv); | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, miDCCursorBitsKey(pScreen), pPriv); | ||||
| 	return pPriv; | ||||
|     } | ||||
|     pPriv->pPicture = 0; | ||||
|  | @ -250,7 +254,7 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor) | |||
| 	free((pointer) pPriv); | ||||
| 	return NULL; | ||||
|     } | ||||
|     dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), pPriv); | ||||
|     dixSetPrivate(&pCursor->bits->devPrivates, miDCCursorBitsKey(pScreen), pPriv); | ||||
| 
 | ||||
|     /* create the two sets of bits, clipping as appropriate */ | ||||
| 
 | ||||
|  | @ -295,7 +299,7 @@ miDCUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) | |||
|     miDCCursorPtr   pPriv; | ||||
| 
 | ||||
|     pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates, | ||||
| 					    CursorScreenKey(pScreen)); | ||||
| 					    miDCCursorBitsKey(pScreen)); | ||||
|     if (pPriv && (pCursor->bits->refcnt <= 1)) | ||||
|     { | ||||
| 	if (pPriv->sourceBits) | ||||
|  | @ -307,7 +311,7 @@ miDCUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) | |||
| 	    FreePicture (pPriv->pPicture, 0); | ||||
| #endif | ||||
| 	free((pointer) pPriv); | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), NULL); | ||||
| 	dixSetPrivate(&pCursor->bits->devPrivates, miDCCursorBitsKey(pScreen), NULL); | ||||
|     } | ||||
|     return TRUE; | ||||
| } | ||||
|  | @ -396,7 +400,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, | |||
|     WindowPtr	    pWin; | ||||
| 
 | ||||
|     pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates, | ||||
| 					    CursorScreenKey(pScreen)); | ||||
| 					    miDCCursorBitsKey(pScreen)); | ||||
|     if (!pPriv) | ||||
|     { | ||||
| 	pPriv = miDCRealize(pScreen, pCursor); | ||||
|  | @ -406,7 +410,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, | |||
|     pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, | ||||
| 						  miDCScreenKey); | ||||
|     pWin = pScreen->root; | ||||
|     pBuffer = MIDCBUFFER(pDev, pScreen); | ||||
|     pBuffer = miGetDCDevice(pDev, pScreen); | ||||
| 
 | ||||
| #ifdef ARGB_CURSOR | ||||
|     if (pPriv->pPicture) | ||||
|  | @ -445,7 +449,7 @@ miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen, | |||
| 
 | ||||
|     pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, | ||||
| 						  miDCScreenKey); | ||||
|     pBuffer = MIDCBUFFER(pDev, pScreen); | ||||
|     pBuffer = miGetDCDevice(pDev, pScreen); | ||||
| 
 | ||||
|     pSave = pBuffer->pSave; | ||||
|     pWin = pScreen->root; | ||||
|  | @ -479,7 +483,7 @@ miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen, | |||
| 
 | ||||
|     pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, | ||||
| 						  miDCScreenKey); | ||||
|     pBuffer = MIDCBUFFER(pDev, pScreen); | ||||
|     pBuffer = miGetDCDevice(pDev, pScreen); | ||||
|     pSave = pBuffer->pSave; | ||||
| 
 | ||||
|     pWin = pScreen->root; | ||||
|  | @ -512,7 +516,7 @@ miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen) | |||
|         if (!pBuffer) | ||||
|             goto failure; | ||||
| 
 | ||||
|         dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, pBuffer); | ||||
|         dixSetPrivate(&pDev->devPrivates, miDCDeviceKey(pScreen), pBuffer); | ||||
|         pWin = pScreen->root; | ||||
| 
 | ||||
|         pBuffer->pSourceGC = miDCMakeGC(pWin); | ||||
|  | @ -560,7 +564,7 @@ miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen) | |||
|         { | ||||
|             pScreen = screenInfo.screens[i]; | ||||
| 
 | ||||
|             pBuffer = MIDCBUFFER(pDev, pScreen); | ||||
|             pBuffer = miGetDCDevice(pDev, pScreen); | ||||
| 
 | ||||
|             if (pBuffer) | ||||
|             { | ||||
|  | @ -578,7 +582,7 @@ miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen) | |||
|                 if (pBuffer->pSave) (*pScreen->DestroyPixmap)(pBuffer->pSave); | ||||
| 
 | ||||
|                 free(pBuffer); | ||||
|                 dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, NULL); | ||||
|                 dixSetPrivate(&pDev->devPrivates, miDCDeviceKey(pScreen), NULL); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue