Allocate per-screen device/cursor-bits private keys in midispcur

midispcur was abusing the CursorScreenKey to index the cursor_bits
privates, it also had a MAXSCREENS array of keys to index device
privates. Switch both of these to the new dixCreatePrivateKey API and
store a pointer to that in the screen private.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
Keith Packard 2010-04-30 19:38:48 -07:00
parent 34db537907
commit ab07e2b8ed

View File

@ -59,14 +59,7 @@ static DevPrivateKeyRec miDCScreenKeyRec;
static Bool miDCCloseScreen(int index, ScreenPtr pScreen); static Bool miDCCloseScreen(int index, ScreenPtr pScreen);
/* per bits per-screen private data */ /* per device private data */
static DevPrivateKeyRec miDCCursorBitsKeyRec[MAXSCREENS];
#define miDCCursorBitsKey(screen) (&miDCCursorBitsKeyRec[(screen)->myNum])
/* per device per-screen private data */
static DevPrivateKeyRec miDCDeviceKeyRec[MAXSCREENS];
#define miDCDeviceKey(screen) (&miDCDeviceKeyRec[(screen)->myNum])
typedef struct { typedef struct {
GCPtr pSourceGC, pMaskGC; GCPtr pSourceGC, pMaskGC;
GCPtr pSaveGC, pRestoreGC; GCPtr pSaveGC, pRestoreGC;
@ -86,9 +79,15 @@ typedef struct {
* in the pCursorBuffers array. * in the pCursorBuffers array.
*/ */
typedef struct { typedef struct {
CloseScreenProcPtr CloseScreen; CloseScreenProcPtr CloseScreen;
DevPrivateKey device_key;
DevPrivateKey cursor_bits_key;
} miDCScreenRec, *miDCScreenPtr; } miDCScreenRec, *miDCScreenPtr;
#define miGetDCScreen(s) ((miDCScreenPtr)(dixLookupPrivate(&(s)->devPrivates, miDCScreenKey)))
#define miDCDeviceKey(s) (miGetDCScreen(s)->device_key)
#define miDCCursorBitsKey(s) (miGetDCScreen(s)->cursor_bits_key)
/* per-cursor per-screen private data */ /* per-cursor per-screen private data */
typedef struct { typedef struct {
PixmapPtr sourceBits; /* source bits */ PixmapPtr sourceBits; /* source bits */
@ -106,16 +105,16 @@ miDCInitialize (ScreenPtr pScreen, miPointerScreenFuncPtr screenFuncs)
if (!dixRegisterPrivateKey(&miDCScreenKeyRec, PRIVATE_SCREEN, 0)) if (!dixRegisterPrivateKey(&miDCScreenKeyRec, PRIVATE_SCREEN, 0))
return FALSE; return FALSE;
if (!dixRegisterPrivateKey(&miDCDeviceKeyRec[pScreen->myNum], PRIVATE_DEVICE, 0))
return FALSE;
if (!dixRegisterPrivateKey(&miDCCursorBitsKeyRec[pScreen->myNum], PRIVATE_CURSOR_BITS, 0))
return FALSE;
pScreenPriv = malloc(sizeof (miDCScreenRec)); pScreenPriv = malloc(sizeof (miDCScreenRec));
if (!pScreenPriv) if (!pScreenPriv)
return FALSE; return FALSE;
pScreenPriv->cursor_bits_key = dixCreatePrivateKey(PRIVATE_CURSOR_BITS, 0);
pScreenPriv->device_key = dixCreatePrivateKey(PRIVATE_DEVICE, 0);
if (!pScreenPriv->cursor_bits_key || !pScreenPriv->device_key) {
free(pScreenPriv);
return FALSE;
}
pScreenPriv->CloseScreen = pScreen->CloseScreen; pScreenPriv->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = miDCCloseScreen; pScreen->CloseScreen = miDCCloseScreen;