devPrivates rework: convert CursorRec and CursorBits over to new interface.

This commit is contained in:
Eamon Walsh 2007-08-30 11:40:39 -04:00 committed by Eamon Walsh
parent 4795df6245
commit 47ab4d648b
14 changed files with 75 additions and 51 deletions

View File

@ -99,6 +99,7 @@ FreeCursorBits(CursorBitsPtr bits)
CloseFont(this->font, (Font)0); CloseFont(this->font, (Font)0);
xfree(this); xfree(this);
} }
dixFreePrivates(bits->devPrivates);
xfree(bits); xfree(bits);
} }
} }
@ -124,6 +125,7 @@ FreeCursor(pointer value, XID cid)
pscr = screenInfo.screens[nscr]; pscr = screenInfo.screens[nscr];
(void)( *pscr->UnrealizeCursor)( pscr, pCurs); (void)( *pscr->UnrealizeCursor)( pscr, pCurs);
} }
dixFreePrivates(pCurs->devPrivates);
FreeCursorBits(pCurs->bits); FreeCursorBits(pCurs->bits);
xfree( pCurs); xfree( pCurs);
return(Success); return(Success);
@ -192,9 +194,9 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
bits->height = cm->height; bits->height = cm->height;
bits->xhot = cm->xhot; bits->xhot = cm->xhot;
bits->yhot = cm->yhot; bits->yhot = cm->yhot;
bits->devPrivates = NULL;
bits->refcnt = -1; bits->refcnt = -1;
CheckForEmptyMask(bits); CheckForEmptyMask(bits);
pCurs->bits = bits; pCurs->bits = bits;
pCurs->refcnt = 1; pCurs->refcnt = 1;
#ifdef XFIXES #ifdef XFIXES
@ -210,10 +212,14 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
pCurs->backGreen = backGreen; pCurs->backGreen = backGreen;
pCurs->backBlue = backBlue; pCurs->backBlue = backBlue;
pCurs->devPrivates = NULL;
pCurs->id = cid;
/* security creation/labeling check */ /* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR, rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
DixCreateAccess, pCurs); DixCreateAccess, pCurs);
if (rc != Success) { if (rc != Success) {
dixFreePrivates(pCurs->devPrivates);
FreeCursorBits(bits); FreeCursorBits(bits);
xfree(pCurs); xfree(pCurs);
return rc; return rc;
@ -232,6 +238,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
pscr = screenInfo.screens[nscr]; pscr = screenInfo.screens[nscr];
( *pscr->UnrealizeCursor)( pscr, pCurs); ( *pscr->UnrealizeCursor)( pscr, pCurs);
} }
dixFreePrivates(pCurs->devPrivates);
FreeCursorBits(bits); FreeCursorBits(bits);
xfree(pCurs); xfree(pCurs);
return BadAlloc; return BadAlloc;
@ -394,10 +401,14 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
pCurs->backGreen = backGreen; pCurs->backGreen = backGreen;
pCurs->backBlue = backBlue; pCurs->backBlue = backBlue;
pCurs->id = cid;
pCurs->devPrivates = NULL;
/* security creation/labeling check */ /* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR, rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
DixCreateAccess, pCurs); DixCreateAccess, pCurs);
if (rc != Success) { if (rc != Success) {
dixFreePrivates(pCurs->devPrivates);
FreeCursorBits(bits); FreeCursorBits(bits);
xfree(pCurs); xfree(pCurs);
return rc; return rc;
@ -416,6 +427,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
pscr = screenInfo.screens[nscr]; pscr = screenInfo.screens[nscr];
( *pscr->UnrealizeCursor)( pscr, pCurs); ( *pscr->UnrealizeCursor)( pscr, pCurs);
} }
dixFreePrivates(pCurs->devPrivates);
FreeCursorBits(pCurs->bits); FreeCursorBits(pCurs->bits);
xfree(pCurs); xfree(pCurs);
return BadAlloc; return BadAlloc;

View File

@ -202,7 +202,7 @@ XFIOKitRealizeCursor8(
} }
// save the result // save the result
pCursor->devPriv[pScreen->myNum] = (pointer) newCursor; dixSetPrivate(&pCursor->devPrivates, pScreen, newCursor);
return TRUE; return TRUE;
} }
@ -285,7 +285,7 @@ XFIOKitRealizeCursor15(
#endif #endif
// save the result // save the result
pCursor->devPriv[pScreen->myNum] = (pointer) newCursor; dixSetPrivate(&pCursor->devPrivates, pScreen, newCursor);
return TRUE; return TRUE;
} }
@ -369,7 +369,7 @@ XFIOKitRealizeCursor24(
#endif #endif
// save the result // save the result
pCursor->devPriv[pScreen->myNum] = (pointer) newCursor; dixSetPrivate(&pCursor->devPrivates, pScreen, newCursor);
return TRUE; return TRUE;
} }
@ -422,7 +422,7 @@ XFIOKitUnrealizeCursor(
!ScreenPriv->canHWCursor) { !ScreenPriv->canHWCursor) {
result = (*ScreenPriv->spriteFuncs->UnrealizeCursor)(pScreen, pCursor); result = (*ScreenPriv->spriteFuncs->UnrealizeCursor)(pScreen, pCursor);
} else { } else {
xfree( pCursor->devPriv[pScreen->myNum] ); xfree(dixLookupPrivate(&pCursor->devPrivates, pScreen));
result = TRUE; result = TRUE;
} }
@ -476,20 +476,20 @@ XFIOKitSetCursor(
// change the cursor image in shared memory // change the cursor image in shared memory
if (dfb->bitsPerPixel == 8) { if (dfb->bitsPerPixel == 8) {
cursorPrivPtr newCursor = cursorPrivPtr newCursor = dixLookupPrivate(&pCursor->devPrivates,
(cursorPrivPtr) pCursor->devPriv[pScreen->myNum]; pScreen);
memcpy(cshmem->cursor.bw8.image[0], newCursor->image, memcpy(cshmem->cursor.bw8.image[0], newCursor->image,
CURSORWIDTH*CURSORHEIGHT); CURSORWIDTH*CURSORHEIGHT);
memcpy(cshmem->cursor.bw8.mask[0], newCursor->mask, memcpy(cshmem->cursor.bw8.mask[0], newCursor->mask,
CURSORWIDTH*CURSORHEIGHT); CURSORWIDTH*CURSORHEIGHT);
} else if (dfb->bitsPerPixel == 16) { } else if (dfb->bitsPerPixel == 16) {
unsigned short *newCursor = unsigned short *newCursor = dixLookupPrivate(&pCursor->devPrivates,
(unsigned short *) pCursor->devPriv[pScreen->myNum]; pScreen);
memcpy(cshmem->cursor.rgb.image[0], newCursor, memcpy(cshmem->cursor.rgb.image[0], newCursor,
2*CURSORWIDTH*CURSORHEIGHT); 2*CURSORWIDTH*CURSORHEIGHT);
} else { } else {
unsigned int *newCursor = unsigned int *newCursor = dixLookupPrivate(&pCursor->devPrivates,
(unsigned int *) pCursor->devPriv[pScreen->myNum]; pScreen);
memcpy(cshmem->cursor.rgb24.image[0], newCursor, memcpy(cshmem->cursor.rgb24.image[0], newCursor,
4*CURSORWIDTH*CURSORHEIGHT); 4*CURSORWIDTH*CURSORHEIGHT);
} }

View File

@ -318,7 +318,7 @@ QuartzRealizeCursor(
if (!qdCursor) return FALSE; if (!qdCursor) return FALSE;
// save the result // save the result
pCursor->devPriv[pScreen->myNum] = (pointer) qdCursor; dixSetPrivate(&pCursor->devPrivates, pScreen, qdCursor);
return TRUE; return TRUE;
} }
@ -345,13 +345,13 @@ QuartzUnrealizeCursor(
(pScreen, pCursor); (pScreen, pCursor);
} }
} else { } else {
CCrsrHandle oldCursor = (CCrsrHandle) pCursor->devPriv[pScreen->myNum]; CCrsrHandle oldCursor = dixLookupPrivate(&pCursor->devPrivates,
pScreen);
if (currentCursor != oldCursor) { if (currentCursor != oldCursor) {
// This should only fail when quitting, in which case we just leak. // This should only fail when quitting, in which case we just leak.
FreeQDCursor(oldCursor); FreeQDCursor(oldCursor);
} }
pCursor->devPriv[pScreen->myNum] = NULL; dixSetPrivate(&pCursor->devPrivates, pScreen, NULL);
return TRUE; return TRUE;
} }
} }
@ -391,7 +391,7 @@ QuartzSetCursor(
(*ScreenPriv->spriteFuncs->SetCursor)(pScreen, 0, x, y); (*ScreenPriv->spriteFuncs->SetCursor)(pScreen, 0, x, y);
ScreenPriv->qdCursorMode = TRUE; ScreenPriv->qdCursorMode = TRUE;
CHANGE_QD_CURSOR(pCursor->devPriv[pScreen->myNum]); CHANGE_QD_CURSOR(dixLookupPrivate(&pCursor->devPrivates, pScreen));
SHOW_QD_CURSOR(pScreen, ScreenPriv->qdCursorVisible); SHOW_QD_CURSOR(pScreen, ScreenPriv->qdCursorVisible);
} }
else if (quartzRootless) { else if (quartzRootless) {

View File

@ -321,7 +321,7 @@ QuartzRealizeCursor(
if (!qdCursor) return FALSE; if (!qdCursor) return FALSE;
// save the result // save the result
pCursor->devPriv[pScreen->myNum] = (pointer) qdCursor; dixSetPrivate(&pCursor->devPrivates, pScreen, qdCursor);
return TRUE; return TRUE;
} }
@ -348,13 +348,13 @@ QuartzUnrealizeCursor(
(pScreen, pCursor); (pScreen, pCursor);
} }
} else { } else {
CCrsrHandle oldCursor = (CCrsrHandle) pCursor->devPriv[pScreen->myNum]; CCrsrHandle oldCursor = dixLookupPrivate(&pCursor->devPrivates,
pScreen);
if (currentCursor != oldCursor) { if (currentCursor != oldCursor) {
// This should only fail when quitting, in which case we just leak. // This should only fail when quitting, in which case we just leak.
FreeQDCursor(oldCursor); FreeQDCursor(oldCursor);
} }
pCursor->devPriv[pScreen->myNum] = NULL; dixSetPrivate(&pCursor->devPrivates, pScreen, NULL);
return TRUE; return TRUE;
} }
} }
@ -394,7 +394,7 @@ QuartzSetCursor(
(*ScreenPriv->spriteFuncs->SetCursor)(pScreen, 0, x, y); (*ScreenPriv->spriteFuncs->SetCursor)(pScreen, 0, x, y);
ScreenPriv->qdCursorMode = TRUE; ScreenPriv->qdCursorMode = TRUE;
CHANGE_QD_CURSOR(pCursor->devPriv[pScreen->myNum]); CHANGE_QD_CURSOR(dixLookupPrivate(&pCursor->devPrivates, pScreen));
SHOW_QD_CURSOR(pScreen, ScreenPriv->qdCursorVisible); SHOW_QD_CURSOR(pScreen, ScreenPriv->qdCursorVisible);
} }
else if (quartzRootless) { else if (quartzRootless) {

View File

@ -662,8 +662,8 @@ static Bool _dmxRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
DMXDBG2("_dmxRealizeCursor(%d,%p)\n", pScreen->myNum, pCursor); DMXDBG2("_dmxRealizeCursor(%d,%p)\n", pScreen->myNum, pCursor);
pCursor->devPriv[pScreen->myNum] = xalloc(sizeof(*pCursorPriv)); DMX_SET_CURSOR_PRIV(pCursor, pScreen, xalloc(sizeof(*pCursorPriv)));
if (!pCursor->devPriv[pScreen->myNum]) if (!DMX_GET_CURSOR_PRIV(pCursor, pScreen))
return FALSE; return FALSE;
pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen); pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen);
@ -700,9 +700,9 @@ static Bool _dmxUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
if (dmxScreen->beDisplay) { if (dmxScreen->beDisplay) {
if (dmxBEFreeCursor(pScreen, pCursor)) if (dmxBEFreeCursor(pScreen, pCursor))
xfree(pCursor->devPriv[pScreen->myNum]); xfree(DMX_GET_CURSOR_PRIV(pCursor, pScreen));
} }
pCursor->devPriv[pScreen->myNum] = NULL; DMX_SET_CURSOR_PRIV(pCursor, pScreen, NULL);
return TRUE; return TRUE;
} }

View File

@ -63,7 +63,10 @@ extern void dmxHideCursor(DMXScreenInfo *dmxScreen);
extern void dmxBECreateCursor(ScreenPtr pScreen, CursorPtr pCursor); extern void dmxBECreateCursor(ScreenPtr pScreen, CursorPtr pCursor);
extern Bool dmxBEFreeCursor(ScreenPtr pScreen, CursorPtr pCursor); extern Bool dmxBEFreeCursor(ScreenPtr pScreen, CursorPtr pCursor);
#define DMX_GET_CURSOR_PRIV(_pCursor, _pScreen) \ #define DMX_GET_CURSOR_PRIV(_pCursor, _pScreen) \
(dmxCursorPrivPtr)(_pCursor)->devPriv[(_pScreen)->myNum] ((dmxCursorPrivPtr)dixLookupPrivate(&(_pCursor)->devPrivates, _pScreen))
#define DMX_SET_CURSOR_PRIV(_pCursor, _pScreen, v) \
dixSetPrivate(&(_pCursor)->devPrivates, _pScreen, v)
#endif /* DMXCURSOR_H */ #endif /* DMXCURSOR_H */

View File

@ -226,7 +226,8 @@ xf86_set_cursor_colors (ScrnInfoPtr scrn, int bg, int fg)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
CursorPtr cursor = xf86_config->cursor; CursorPtr cursor = xf86_config->cursor;
int c; int c;
CARD8 *bits = cursor ? cursor->devPriv[screen->myNum] : NULL; CARD8 *bits = cursor ? dixLookupPrivate(&cursor->devPrivates,
screen) : NULL;
/* Save ARGB versions of these colors */ /* Save ARGB versions of these colors */
xf86_config->cursor_fg = (CARD32) fg | 0xff000000; xf86_config->cursor_fg = (CARD32) fg | 0xff000000;
@ -612,7 +613,7 @@ xf86_reload_cursors (ScreenPtr screen)
else else
#endif #endif
(*cursor_info->LoadCursorImage)(cursor_info->pScrn, (*cursor_info->LoadCursorImage)(cursor_info->pScrn,
cursor->devPriv[screen->myNum]); dixLookupPrivate(&cursor->devPrivates, screen));
(*cursor_info->SetCursorPosition)(cursor_info->pScrn, x, y); (*cursor_info->SetCursorPosition)(cursor_info->pScrn, x, y);
(*cursor_info->ShowCursor)(cursor_info->pScrn); (*cursor_info->ShowCursor)(cursor_info->pScrn);

View File

@ -251,7 +251,7 @@ xf86CursorRealizeCursor(ScreenPtr pScreen, CursorPtr pCurs)
&pScreen->devPrivates, xf86CursorScreenKey); &pScreen->devPrivates, xf86CursorScreenKey);
if (pCurs->refcnt <= 1) if (pCurs->refcnt <= 1)
pCurs->devPriv[pScreen->myNum] = NULL; dixSetPrivate(&pCurs->devPrivates, pScreen, NULL);
return (*ScreenPriv->spriteFuncs->RealizeCursor)(pScreen, pCurs); return (*ScreenPriv->spriteFuncs->RealizeCursor)(pScreen, pCurs);
} }
@ -263,8 +263,8 @@ xf86CursorUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCurs)
&pScreen->devPrivates, xf86CursorScreenKey); &pScreen->devPrivates, xf86CursorScreenKey);
if (pCurs->refcnt <= 1) { if (pCurs->refcnt <= 1) {
xfree(pCurs->devPriv[pScreen->myNum]); xfree(dixLookupPrivate(&pCurs->devPrivates, pScreen));
pCurs->devPriv[pScreen->myNum] = NULL; dixSetPrivate(&pCurs->devPrivates, pScreen, NULL);
} }
return (*ScreenPriv->spriteFuncs->UnrealizeCursor)(pScreen, pCurs); return (*ScreenPriv->spriteFuncs->UnrealizeCursor)(pScreen, pCurs);

View File

@ -123,7 +123,7 @@ xf86SetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
return; return;
} }
bits = pCurs->devPriv[pScreen->myNum]; bits = (unsigned char *)dixLookupPrivate(&pCurs->devPrivates, pScreen);
x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX; x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX;
y -= infoPtr->pScrn->frameY0 + ScreenPriv->HotY; y -= infoPtr->pScrn->frameY0 + ScreenPriv->HotY;
@ -133,7 +133,7 @@ xf86SetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
#endif #endif
if (!bits) { if (!bits) {
bits = (*infoPtr->RealizeCursor)(infoPtr, pCurs); bits = (*infoPtr->RealizeCursor)(infoPtr, pCurs);
pCurs->devPriv[pScreen->myNum] = bits; dixSetPrivate(&pCurs->devPrivates, pScreen, bits);
} }
if (!(infoPtr->Flags & HARDWARE_CURSOR_UPDATE_UNHIDDEN)) if (!(infoPtr->Flags & HARDWARE_CURSOR_UPDATE_UNHIDDEN))

View File

@ -121,10 +121,10 @@ typedef struct _xglxCursor {
} xglxCursorRec, *xglxCursorPtr; } xglxCursorRec, *xglxCursorPtr;
#define XGLX_GET_CURSOR_PRIV(pCursor, pScreen) \ #define XGLX_GET_CURSOR_PRIV(pCursor, pScreen) \
((xglxCursorPtr) (pCursor)->devPriv[(pScreen)->myNum]) ((xglxCursorPtr)dixLookupPrivate(&(pCursor)->devPrivates, pScreen))
#define XGLX_SET_CURSOR_PRIV(pCursor, pScreen, v) \ #define XGLX_SET_CURSOR_PRIV(pCursor, pScreen, v) \
((pCursor)->devPriv[(pScreen)->myNum] = (pointer) v) dixSetPrivate(&(pCursor)->devPrivates, pScreen, v)
#define XGLX_CURSOR_PRIV(pCursor, pScreen) \ #define XGLX_CURSOR_PRIV(pCursor, pScreen) \
xglxCursorPtr pCursorPriv = XGLX_GET_CURSOR_PRIV (pCursor, pScreen) xglxCursorPtr pCursorPriv = XGLX_GET_CURSOR_PRIV (pCursor, pScreen)

View File

@ -104,8 +104,8 @@ xnestRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
bg_color.green = pCursor->backGreen; bg_color.green = pCursor->backGreen;
bg_color.blue = pCursor->backBlue; bg_color.blue = pCursor->backBlue;
pCursor->devPriv[pScreen->myNum] = (pointer)xalloc(sizeof(xnestPrivCursor)); xnestSetCursorPriv(pCursor, pScreen, xalloc(sizeof(xnestPrivCursor)));
xnestCursorPriv(pCursor, pScreen)->cursor = xnestCursor(pCursor, pScreen) =
XCreatePixmapCursor(xnestDisplay, source, mask, &fg_color, &bg_color, XCreatePixmapCursor(xnestDisplay, source, mask, &fg_color, &bg_color,
pCursor->bits->xhot, pCursor->bits->yhot); pCursor->bits->xhot, pCursor->bits->yhot);
@ -119,7 +119,7 @@ Bool
xnestUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) xnestUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
{ {
XFreeCursor(xnestDisplay, xnestCursor(pCursor, pScreen)); XFreeCursor(xnestDisplay, xnestCursor(pCursor, pScreen));
xfree(xnestCursorPriv(pCursor, pScreen)); xfree(xnestGetCursorPriv(pCursor, pScreen));
return True; return True;
} }

View File

@ -19,11 +19,14 @@ typedef struct {
Cursor cursor; Cursor cursor;
} xnestPrivCursor; } xnestPrivCursor;
#define xnestCursorPriv(pCursor, pScreen) \ #define xnestGetCursorPriv(pCursor, pScreen) \
((xnestPrivCursor *)((pCursor)->devPriv[pScreen->myNum])) ((xnestPrivCursor *)dixLookupPrivate(&(pCursor)->devPrivates, pScreen))
#define xnestSetCursorPriv(pCursor, pScreen, v) \
dixSetPrivate(&(pCursor)->devPrivates, pScreen, v)
#define xnestCursor(pCursor, pScreen) \ #define xnestCursor(pCursor, pScreen) \
(xnestCursorPriv(pCursor, pScreen)->cursor) (xnestGetCursorPriv(pCursor, pScreen)->cursor)
Bool xnestRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); Bool xnestRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
Bool xnestUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); Bool xnestUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);

View File

@ -49,6 +49,7 @@ SOFTWARE.
#define CURSORSTRUCT_H #define CURSORSTRUCT_H
#include "cursor.h" #include "cursor.h"
#include "privates.h"
/* /*
* device-independent cursor storage * device-independent cursor storage
*/ */
@ -63,7 +64,7 @@ typedef struct _CursorBits {
Bool emptyMask; /* all zeros mask */ Bool emptyMask; /* all zeros mask */
unsigned short width, height, xhot, yhot; /* metrics */ unsigned short width, height, xhot, yhot; /* metrics */
int refcnt; /* can be shared */ int refcnt; /* can be shared */
pointer devPriv[MAXSCREENS]; /* set by pScr->RealizeCursor*/ PrivateRec *devPrivates; /* set by pScr->RealizeCursor*/
#ifdef ARGB_CURSOR #ifdef ARGB_CURSOR
CARD32 *argb; /* full-color alpha blended */ CARD32 *argb; /* full-color alpha blended */
#endif #endif
@ -74,7 +75,8 @@ typedef struct _Cursor {
unsigned short foreRed, foreGreen, foreBlue; /* device-independent color */ unsigned short foreRed, foreGreen, foreBlue; /* device-independent color */
unsigned short backRed, backGreen, backBlue; /* device-independent color */ unsigned short backRed, backGreen, backBlue; /* device-independent color */
int refcnt; int refcnt;
pointer devPriv[MAXSCREENS]; /* set by pScr->RealizeCursor*/ PrivateRec *devPrivates; /* set by pScr->RealizeCursor*/
XID id;
#ifdef XFIXES #ifdef XFIXES
CARD32 serialNumber; CARD32 serialNumber;
Atom name; Atom name;

View File

@ -190,7 +190,7 @@ miDCRealizeCursor (pScreen, pCursor)
CursorPtr pCursor; CursorPtr pCursor;
{ {
if (pCursor->bits->refcnt <= 1) if (pCursor->bits->refcnt <= 1)
pCursor->bits->devPriv[pScreen->myNum] = (pointer)NULL; dixSetPrivate(&pCursor->bits->devPrivates, pScreen, NULL);
return TRUE; return TRUE;
} }
@ -290,7 +290,7 @@ miDCRealize (
xfree ((pointer) pPriv); xfree ((pointer) pPriv);
return (miDCCursorPtr)NULL; return (miDCCursorPtr)NULL;
} }
pCursor->bits->devPriv[pScreen->myNum] = (pointer) pPriv; dixSetPrivate(&pCursor->bits->devPrivates, pScreen, pPriv);
return pPriv; return pPriv;
} }
pPriv->pPicture = 0; pPriv->pPicture = 0;
@ -308,7 +308,7 @@ miDCRealize (
xfree ((pointer) pPriv); xfree ((pointer) pPriv);
return (miDCCursorPtr)NULL; return (miDCCursorPtr)NULL;
} }
pCursor->bits->devPriv[pScreen->myNum] = (pointer) pPriv; dixSetPrivate(&pCursor->bits->devPrivates, pScreen, pPriv);
/* create the two sets of bits, clipping as appropriate */ /* create the two sets of bits, clipping as appropriate */
@ -354,7 +354,8 @@ miDCUnrealizeCursor (pScreen, pCursor)
{ {
miDCCursorPtr pPriv; miDCCursorPtr pPriv;
pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum]; pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
pScreen);
if (pPriv && (pCursor->bits->refcnt <= 1)) if (pPriv && (pCursor->bits->refcnt <= 1))
{ {
if (pPriv->sourceBits) if (pPriv->sourceBits)
@ -366,7 +367,7 @@ miDCUnrealizeCursor (pScreen, pCursor)
FreePicture (pPriv->pPicture, 0); FreePicture (pPriv->pPicture, 0);
#endif #endif
xfree ((pointer) pPriv); xfree ((pointer) pPriv);
pCursor->bits->devPriv[pScreen->myNum] = (pointer)NULL; dixSetPrivate(&pCursor->bits->devPrivates, pScreen, NULL);
} }
return TRUE; return TRUE;
} }
@ -461,7 +462,8 @@ miDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
miDCCursorPtr pPriv; miDCCursorPtr pPriv;
WindowPtr pWin; WindowPtr pWin;
pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum]; pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
pScreen);
if (!pPriv) if (!pPriv)
{ {
pPriv = miDCRealize(pScreen, pCursor); pPriv = miDCRealize(pScreen, pCursor);
@ -711,7 +713,8 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
XID gcval = FALSE; XID gcval = FALSE;
PixmapPtr pTemp; PixmapPtr pTemp;
pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum]; pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
pScreen);
if (!pPriv) if (!pPriv)
{ {
pPriv = miDCRealize(pScreen, pCursor); pPriv = miDCRealize(pScreen, pCursor);