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:
parent
34db537907
commit
ab07e2b8ed
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user