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.

Signed-off-by: Keith Packard <[email protected]>
---
 mi/midispcur.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/mi/midispcur.c b/mi/midispcur.c
index 06bddec..acb4ce4 100644
--- a/mi/midispcur.c
+++ b/mi/midispcur.c
@@ -59,6 +59,9 @@ static DevPrivateKey miDCScreenKey = &miDCScreenKeyIndex;
 
 static Bool    miDCCloseScreen(int index, ScreenPtr pScreen);
 
+/* per bits per-screen private data */
+static int miDCCursorBitsKeyIndex[MAXSCREENS];
+
 /* per device per-screen private data */
 static int miDCSpriteKeyIndex[MAXSCREENS];
 static DevPrivateKey miDCSpriteKey = miDCSpriteKeyIndex;
@@ -80,6 +83,9 @@ typedef struct {
   (miDCBufferPtr)dixLookupPrivate(&dev->devPrivates, miDCSpriteKey + 
(screen)->myNum) : \
   (miDCBufferPtr)dixLookupPrivate(&dev->u.master->devPrivates, miDCSpriteKey + 
(screen)->myNum))
 
+#define MIDCBITS(screen) \
+    (miDCCursorBitsKeyIndex + (screen)->myNum)
+
 /* 
  * The core pointer buffer will point to the index of the virtual core pointer
  * in the pCursorBuffers array. 
@@ -174,7 +180,7 @@ static Bool
 miDCRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
 {
     if (pCursor->bits->refcnt <= 1)
-       dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), 
NULL);
+       dixSetPrivate(&pCursor->bits->devPrivates, MIDCBITS(pScreen), NULL);
     return TRUE;
 }
 
@@ -272,7 +278,7 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor)
            free((pointer) pPriv);
            return NULL;
        }
-       dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), 
pPriv);
+       dixSetPrivate(&pCursor->bits->devPrivates, MIDCBITS(pScreen), pPriv);
        return pPriv;
     }
     pPriv->pPicture = 0;
@@ -290,7 +296,7 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor)
        free((pointer) pPriv);
        return NULL;
     }
-    dixSetPrivate(&pCursor->bits->devPrivates, CursorScreenKey(pScreen), 
pPriv);
+    dixSetPrivate(&pCursor->bits->devPrivates, MIDCBITS(pScreen), pPriv);
 
     /* create the two sets of bits, clipping as appropriate */
 
@@ -335,7 +341,7 @@ miDCUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
     miDCCursorPtr   pPriv;
 
     pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
-                                           CursorScreenKey(pScreen));
+                                           MIDCBITS(pScreen));
     if (pPriv && (pCursor->bits->refcnt <= 1))
     {
        if (pPriv->sourceBits)
@@ -347,7 +353,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, MIDCBITS(pScreen), NULL);
     }
     return TRUE;
 }
@@ -436,7 +442,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, 
CursorPtr pCursor,
     WindowPtr      pWin;
 
     pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
-                                           CursorScreenKey(pScreen));
+                                           MIDCBITS(pScreen));
     if (!pPriv)
     {
        pPriv = miDCRealize(pScreen, pCursor);
@@ -680,7 +686,7 @@ miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, 
CursorPtr pCursor,
     PixmapPtr      pTemp;
 
     pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
-                                           CursorScreenKey(pScreen));
+                                           MIDCBITS(pScreen));
     if (!pPriv)
     {
        pPriv = miDCRealize(pScreen, pCursor);
-- 
1.7.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to