xserver: Branch 'mpx'

Peter Hutterer whot at kemper.freedesktop.org
Wed Mar 28 07:39:21 EEST 2007


 Xi/querydp.c                   |    4 -
 Xi/warpdevp.c                  |    2 
 dix/devices.c                  |   34 ++++++----
 dix/events.c                   |  133 ++++++++++++++++++++---------------------
 dix/getevents.c                |   15 ----
 hw/xfree86/common/xf86Xinput.c |    2 
 include/inputstr.h             |   17 +++--
 mi/mieq.c                      |    8 --
 mi/mipointer.c                 |    8 --
 9 files changed, 111 insertions(+), 112 deletions(-)

New commits:
diff-tree 5f9c10e8da0d9d96cc00a38cdf9a8c3030063e03 (from e54311395e1e7ae458c8ce59da0914706c4a04f6)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Sun Mar 25 15:00:03 2007 +0930

    Clean up DeviceIntPtr, prepare for Server 1.4 ABI. Move sprite-related
    information into a new SpriteInfoRec, remove isMPDev flag.

diff --git a/Xi/querydp.c b/Xi/querydp.c
index a24dad0..af93fed 100644
--- a/Xi/querydp.c
+++ b/Xi/querydp.c
@@ -101,7 +101,7 @@ ProcXQueryDevicePointer(register ClientP
     if (pDev->valuator->motionHintWindow)
         MaybeStopHint(pDev, client);
 
-    pSprite = pDev->pSprite;
+    pSprite = pDev->spriteInfo->sprite;
     rep.repType = X_Reply;
     rep.RepType = X_QueryDevicePointer;
     rep.length = 0;
@@ -111,7 +111,7 @@ ProcXQueryDevicePointer(register ClientP
     rep.rootX = pSprite->hot.x;
     rep.rootY = pSprite->hot.y;
     rep.child = None;
-    rep.shared = (pDev->isMPDev) ? xFalse : xTrue; 
+    rep.shared = (pDev->spriteInfo->spriteOwner) ? xFalse : xTrue; 
 
     if (pSprite->hot.pScreen == pWin->drawable.pScreen)
     {
diff --git a/Xi/warpdevp.c b/Xi/warpdevp.c
index a9ddb0b..8df7e14 100644
--- a/Xi/warpdevp.c
+++ b/Xi/warpdevp.c
@@ -102,7 +102,7 @@ ProcXWarpDevicePointer(register ClientPt
         }
     }
 
-    pSprite = pDev->pSprite;
+    pSprite = pDev->spriteInfo->sprite;
     x = pSprite->hotPhys.x;
     y = pSprite->hotPhys.y;
 
diff --git a/dix/devices.c b/dix/devices.c
index 10843d4..724ef98 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -147,6 +147,13 @@ AddInputDevice(DeviceProc deviceProc, Bo
     dev->inited = FALSE;
     dev->enabled = FALSE;
 
+    /* sprite defaults */
+    dev->spriteInfo = (SpriteInfoPtr)xcalloc(sizeof(SpriteInfoRec), 1);
+    if (!dev->spriteInfo)
+        return (DeviceIntPtr)NULL;
+    dev->spriteInfo->sprite = NULL;
+    dev->spriteInfo->spriteOwner = FALSE;
+
     for (prev = &inputInfo.off_devices; *prev; prev = &(*prev)->next)
         ;
     *prev = dev;
@@ -173,7 +180,7 @@ EnableDevice(DeviceIntPtr dev)
     dev->enabled = TRUE;
     *prev = dev->next;
 
-    if (IsPointerDevice(dev) && dev->isMPDev)
+    if (IsPointerDevice(dev) && dev->spriteInfo->spriteOwner)
         InitializeSprite(dev, GetCurrentRootWindow());
     else
         PairDevices(NULL, inputInfo.pointer, dev);
@@ -360,7 +367,7 @@ InitCoreDevices()
         dev->coreGrab.ActivateGrab = ActivateKeyboardGrab;
         dev->coreGrab.DeactivateGrab = DeactivateKeyboardGrab;
         dev->coreEvents = FALSE;
-        dev->spriteOwner = FALSE;
+        dev->spriteInfo->spriteOwner = FALSE;
         if (!AllocateDevicePrivate(dev, CoreDevicePrivatesIndex))
             FatalError("Couldn't allocate keyboard devPrivates\n");
         dev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
@@ -542,7 +549,7 @@ CloseDevice(DeviceIntPtr dev)
 #endif
     
     if (DevHasCursor(dev))
-        xfree((pointer)dev->pSprite);
+        xfree((pointer)dev->spriteInfo->sprite);
 
     /* a client may have the device set as client pointer */
     for (j = 0; j < currentMaxClients; j++)
@@ -556,6 +563,7 @@ CloseDevice(DeviceIntPtr dev)
 
     xfree(dev->coreGrab.sync.event);
     xfree(dev->deviceGrab.sync.event);
+    xfree(dev->spriteInfo);
     xfree(dev);
 }
 
@@ -2009,14 +2017,14 @@ PairDevices(ClientPtr client, DeviceIntP
     else if (pairingClient != client)
         return BadAccess;
 
-    if (kbd->spriteOwner)
+    if (kbd->spriteInfo->spriteOwner)
     {
-        xfree(kbd->pSprite);
-        kbd->pSprite = NULL;
-        kbd->spriteOwner = FALSE;
+        xfree(kbd->spriteInfo->sprite);
+        kbd->spriteInfo->sprite = NULL;
+        kbd->spriteInfo->spriteOwner = FALSE;
     }
 
-    kbd->pSprite = ptr->pSprite;
+    kbd->spriteInfo->sprite = ptr->spriteInfo->sprite;
     return Success;
 }
 
@@ -2029,7 +2037,8 @@ GetPairedPointer(DeviceIntPtr kbd)
     DeviceIntPtr ptr = inputInfo.devices;
     while(ptr)
     {
-        if (ptr->pSprite == kbd->pSprite && ptr->spriteOwner)
+        if (ptr->spriteInfo->sprite == kbd->spriteInfo->sprite && 
+                ptr->spriteInfo->spriteOwner)
         {
             return ptr;
         }
@@ -2053,7 +2062,7 @@ GetPairedKeyboard(DeviceIntPtr ptr)
     {
         if (ptr != dev && 
             IsKeyboardDevice(dev) &&
-            ptr->pSprite == dev->pSprite)
+            ptr->spriteInfo->sprite == dev->spriteInfo->sprite)
             return dev;
         dev = dev->next;
     }
@@ -2109,7 +2118,7 @@ GuessFreePointerDevice()
     while(it)
     {
         /* found device with a sprite? */
-        if (it->spriteOwner)
+        if (it->spriteInfo->spriteOwner)
         {
             lastRealPtr = it;
 
@@ -2117,7 +2126,8 @@ GuessFreePointerDevice()
             while(it2)
             {
                 /* something paired with it? */
-                if (it != it2 && it2->pSprite == it->pSprite)
+                if (it != it2 && 
+                        it2->spriteInfo->sprite == it->spriteInfo->sprite)
                     break;
 
                 it2 = it2->next;
diff --git a/dix/events.c b/dix/events.c
index 65d6eae..9f7e08d 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -247,7 +247,7 @@ static int spriteTraceGood;
 _X_EXPORT Bool
 DevHasCursor(DeviceIntPtr pDev) 
 {
-    return (pDev != inputInfo.pointer && pDev->spriteOwner);
+    return (pDev != inputInfo.pointer && pDev->spriteInfo->spriteOwner);
 }
 
 /*
@@ -346,7 +346,7 @@ static void PostNewCursor(DeviceIntPtr p
 
 #define SyntheticMotion(dev, x, y) \
     PostSyntheticMotion(dev, x, y, noPanoramiXExtension ? 0 : \
-                              dev->pSprite->screen->myNum, \
+                              dev->spriteInfo->sprite->screen->myNum, \
                         syncEvents.playingEvents ? \
                           syncEvents.time.milliseconds : \
                           currentTime.milliseconds);
@@ -361,7 +361,7 @@ XineramaSetCursorPosition(
     ScreenPtr pScreen;
     BoxRec box;
     int i;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     /* x,y are in Screen 0 coordinates.  We need to decide what Screen
        to send the message too and what the coordinates relative to 
@@ -399,7 +399,7 @@ XineramaSetCursorPosition(
 static void
 XineramaConstrainCursor(DeviceIntPtr pDev)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
     ScreenPtr pScreen;
     BoxRec newBox;
 
@@ -423,7 +423,7 @@ XineramaCheckPhysLimits(
     Bool generateEvents
 ){
     HotSpot new;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (!cursor)
 	return;
@@ -463,7 +463,7 @@ XineramaCheckPhysLimits(
 static Bool
 XineramaSetWindowPntrs(DeviceIntPtr pDev, WindowPtr pWin)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if(pWin == WindowTable[0]) {
 	    memcpy(pSprite->windows, WindowTable, 
@@ -492,7 +492,7 @@ XineramaCheckVirtualMotion(
    QdEventPtr qe,
    WindowPtr pWin) 
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (qe)
     {
@@ -564,7 +564,7 @@ static Bool
 XineramaCheckMotion(xEvent *xE, DeviceIntPtr pDev)
 {
     WindowPtr prevSpriteWin;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     prevSpriteWin = pSprite->win;
 
@@ -629,7 +629,7 @@ XineramaConfineCursorToWindow(DeviceIntP
                               WindowPtr pWin, 
                               Bool generateEvents)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (syncEvents.playingEvents)
     {
@@ -683,7 +683,7 @@ XineramaConfineCursorToWindow(DeviceIntP
 static void
 XineramaChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (cursor != pSprite->current)
     {
@@ -723,7 +723,7 @@ ConfineToShape(DeviceIntPtr pDev, Region
     BoxRec box;
     int x = *px, y = *py;
     int incx = 1, incy = 1;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (POINT_IN_REGION(pSprite->hot.pScreen, shape, x, y, &box))
 	return;
@@ -764,7 +764,7 @@ CheckPhysLimits(
     ScreenPtr pScreen)
 {
     HotSpot new;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (!cursor)
 	return;
@@ -809,7 +809,7 @@ CheckVirtualMotion(
     QdEventPtr qe,
     WindowPtr pWin)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
 #ifdef PANORAMIX
     if(!noPanoramiXExtension) {
@@ -865,7 +865,7 @@ static void
 ConfineCursorToWindow(DeviceIntPtr pDev, WindowPtr pWin, Bool generateEvents, Bool confineToScreen)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
 #ifdef PANORAMIX
     if(!noPanoramiXExtension) {
@@ -894,13 +894,13 @@ ConfineCursorToWindow(DeviceIntPtr pDev,
 _X_EXPORT Bool
 PointerConfinedToScreen(DeviceIntPtr pDev)
 {
-    return pDev->pSprite->confined;
+    return pDev->spriteInfo->sprite->confined;
 }
 
 static void
 ChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
 #ifdef PANORAMIX
     if(!noPanoramiXExtension) {
@@ -938,7 +938,7 @@ PostNewCursor(DeviceIntPtr pDev)
 {
     WindowPtr win;
     GrabPtr grab = pDev->coreGrab.grab;
-    SpritePtr   pSprite = pDev->pSprite;
+    SpritePtr   pSprite = pDev->spriteInfo->sprite;
     CursorPtr   pCursor;
 
     if (syncEvents.playingEvents)
@@ -982,19 +982,19 @@ GetCurrentRootWindow()
 _X_EXPORT WindowPtr
 GetSpriteWindow(DeviceIntPtr pDev)
 {
-    return pDev->pSprite->win;
+    return pDev->spriteInfo->sprite->win;
 }
 
 _X_EXPORT CursorPtr
 GetSpriteCursor(DeviceIntPtr pDev)
 {
-    return pDev->pSprite->current;
+    return pDev->spriteInfo->sprite->current;
 }
 
 _X_EXPORT void
 GetSpritePosition(DeviceIntPtr pDev, int *px, int *py)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
     *px = pSprite->hotPhys.x;
     *py = pSprite->hotPhys.y;
 }
@@ -1004,7 +1004,7 @@ _X_EXPORT int
 XineramaGetCursorScreen(DeviceIntPtr pDev)
 {
     if(!noPanoramiXExtension) {
-	return pDev->pSprite->screen->myNum;
+	return pDev->spriteInfo->sprite->screen->myNum;
     } else {
 	return 0;
     }
@@ -1049,7 +1049,7 @@ EnqueueEvent(xEvent *xE, DeviceIntPtr de
     QdEventPtr tail = *syncEvents.pendtail;
     QdEventPtr qe;
     xEvent		*qxE;
-    SpritePtr pSprite = device->pSprite;
+    SpritePtr pSprite = device->spriteInfo->sprite;
 
     NoticeTime(xE);
 
@@ -1146,10 +1146,10 @@ PlayReleasedEvents(void)
 	    if(!noPanoramiXExtension) {
 		qe->event->u.keyButtonPointer.rootX += 
 			panoramiXdataPtr[0].x - 
-			panoramiXdataPtr[pDev->pSprite->screen->myNum].x;
+			panoramiXdataPtr[pDev->spriteInfo->sprite->screen->myNum].x;
 		qe->event->u.keyButtonPointer.rootY += 
 			panoramiXdataPtr[0].y - 
-			panoramiXdataPtr[pDev->pSprite->screen->myNum].y;
+			panoramiXdataPtr[pDev->spriteInfo->sprite->screen->myNum].y;
 	    }
 #endif
 	    (*qe->device->public.processInputProc)(qe->event, qe->device,
@@ -1241,14 +1241,14 @@ playmore:
             if ((grab = dev->coreGrab.grab) && grab->confineTo)
             {
                 if (grab->confineTo->drawable.pScreen !=
-                        dev->pSprite->hotPhys.pScreen) 
-                    dev->pSprite->hotPhys.x =
-                        dev->pSprite->hotPhys.y = 0;
+                        dev->spriteInfo->sprite->hotPhys.pScreen) 
+                    dev->spriteInfo->sprite->hotPhys.x =
+                        dev->spriteInfo->sprite->hotPhys.y = 0;
                 ConfineCursorToWindow(dev, grab->confineTo, TRUE, TRUE);
             }
             else
                 ConfineCursorToWindow(dev,
-                        WindowTable[dev->pSprite->hotPhys.pScreen->myNum],
+                        WindowTable[dev->spriteInfo->sprite->hotPhys.pScreen->myNum],
                         TRUE, FALSE);
             PostNewCursor(dev);
         }
@@ -1270,13 +1270,13 @@ ScreenRestructured (ScreenPtr pScreen)
         if ((grab = pDev->coreGrab.grab) && grab->confineTo)
         {
             if (grab->confineTo->drawable.pScreen 
-                    != pDev->pSprite->hotPhys.pScreen)
-                pDev->pSprite->hotPhys.x = pDev->pSprite->hotPhys.y = 0;
+                    != pDev->spriteInfo->sprite->hotPhys.pScreen)
+                pDev->spriteInfo->sprite->hotPhys.x = pDev->spriteInfo->sprite->hotPhys.y = 0;
             ConfineCursorToWindow(pDev, grab->confineTo, TRUE, TRUE);
         }
         else
             ConfineCursorToWindow(pDev, 
-                    WindowTable[pDev->pSprite->hotPhys.pScreen->myNum],
+                    WindowTable[pDev->spriteInfo->sprite->hotPhys.pScreen->myNum],
                     TRUE, FALSE);
     }
 }
@@ -1322,13 +1322,14 @@ ActivatePointerGrab(DeviceIntPtr mouse, 
 {
     WindowPtr oldWin = (mouse->coreGrab.grab) ? 
                         mouse->coreGrab.grab->window
-                        : mouse->pSprite->win;
+                        : mouse->spriteInfo->sprite->win;
 
     if (grab->confineTo)
     {
 	if (grab->confineTo->drawable.pScreen 
-                != mouse->pSprite->hotPhys.pScreen)
-	    mouse->pSprite->hotPhys.x = mouse->pSprite->hotPhys.y = 0;
+                != mouse->spriteInfo->sprite->hotPhys.pScreen)
+	    mouse->spriteInfo->sprite->hotPhys.x = 
+                mouse->spriteInfo->sprite->hotPhys.y = 0;
 	ConfineCursorToWindow(mouse, grab->confineTo, FALSE, TRUE);
     }
     DoEnterLeaveEvents(mouse, oldWin, grab->window, NotifyGrab);
@@ -1362,7 +1363,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse
 	    dev->coreGrab.sync.other = NullGrab;
     }
     DoEnterLeaveEvents(mouse, grab->window, 
-                       mouse->pSprite->win, NotifyUngrab);
+                       mouse->spriteInfo->sprite->win, NotifyUngrab);
     if (grab->confineTo)
 	ConfineCursorToWindow(mouse, ROOT, FALSE, FALSE);
     PostNewCursor(mouse);
@@ -1381,7 +1382,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd,
     else if (keybd->focus)
 	oldWin = keybd->focus->win;
     else
-	oldWin = keybd->pSprite->win;
+	oldWin = keybd->spriteInfo->sprite->win;
     if (oldWin == FollowKeyboardWin)
 	oldWin = inputInfo.keyboard->focus->win;
     if (keybd->valuator)
@@ -1403,7 +1404,7 @@ DeactivateKeyboardGrab(DeviceIntPtr keyb
     GrabPtr grab = keybd->coreGrab.grab;
     DeviceIntPtr dev;
     WindowPtr focusWin = keybd->focus ? keybd->focus->win
-					       : keybd->pSprite->win;
+                                           : keybd->spriteInfo->sprite->win;
 
     if (focusWin == FollowKeyboardWin)
 	focusWin = inputInfo.keyboard->focus->win;
@@ -1883,7 +1884,7 @@ FixUpEventFromWindow(
     Window child,
     Bool calcChild)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     if (calcChild)
     {
@@ -2039,7 +2040,7 @@ static Bool 
 PointInBorderSize(WindowPtr pWin, int x, int y)
 {
     BoxRec box;
-    SpritePtr pSprite = inputInfo.pointer->pSprite;
+    SpritePtr pSprite = inputInfo.pointer->spriteInfo->sprite;
 
     if(POINT_IN_REGION(pWin->drawable.pScreen, &pWin->borderSize, x, y, &box))
 	return TRUE;
@@ -2114,7 +2115,7 @@ Bool
 CheckMotion(xEvent *xE, DeviceIntPtr pDev)
 {
     WindowPtr prevSpriteWin;
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
         
     prevSpriteWin = pSprite->win;
 
@@ -2219,7 +2220,7 @@ void ReinitializeRootWindow(WindowPtr wi
     {
         if (DevHasCursor(pDev))
         {
-            pSprite = pDev->pSprite;
+            pSprite = pDev->spriteInfo->sprite;
             pSprite->hot.x        -= xoff;
             pSprite->hot.y        -= yoff;
 
@@ -2280,15 +2281,15 @@ InitializeSprite(DeviceIntPtr pDev, Wind
     SpritePtr pSprite;
     ScreenPtr pScreen; 
 
-    if (!pDev->pSprite)
+    if (!pDev->spriteInfo->sprite)
     {
-        pDev->pSprite = (SpritePtr)xcalloc(1, sizeof(SpriteRec));
-        if (!pDev->pSprite)
+        pDev->spriteInfo->sprite = (SpritePtr)xcalloc(1, sizeof(SpriteRec));
+        if (!pDev->spriteInfo->sprite)
             FatalError("InitializeSprite: failed to allocate sprite struct");
     }
 
-    pSprite = pDev->pSprite;
-    pDev->spriteOwner = TRUE;
+    pSprite = pDev->spriteInfo->sprite;
+    pDev->spriteInfo->spriteOwner = TRUE;
 
     pScreen = (pWin) ? pWin->drawable.pScreen : (ScreenPtr)NULL;
     pSprite->hot.pScreen = pScreen;
@@ -2363,7 +2364,7 @@ WindowHasNewCursor(WindowPtr pWin)
 _X_EXPORT void
 NewCurrentScreen(DeviceIntPtr pDev, ScreenPtr newScreen, int x, int y)
 {
-    SpritePtr pSprite = pDev->pSprite;
+    SpritePtr pSprite = pDev->spriteInfo->sprite;
 
     pSprite->hotPhys.x = x;
     pSprite->hotPhys.y = y;
@@ -2423,7 +2424,7 @@ XineramaPointInWindowIsVisible(
     yoff = y + panoramiXdataPtr[0].y;  
 
     for(i = 1; i < PanoramiXNumScreens; i++) {
-	pWin = inputInfo.pointer->pSprite->windows[i];
+	pWin = inputInfo.pointer->spriteInfo->sprite->windows[i];
 	pScreen = pWin->drawable.pScreen;
 	x = xoff - panoramiXdataPtr[i].x;
 	y = yoff - panoramiXdataPtr[i].y;
@@ -2446,7 +2447,7 @@ XineramaWarpPointer(ClientPtr client)
 {
     WindowPtr	dest = NULL;
     int		x, y, rc;
-    SpritePtr   pSprite = PickPointer(client)->pSprite;
+    SpritePtr   pSprite = PickPointer(client)->spriteInfo->sprite;
 
     REQUEST(xWarpPointerReq);
 
@@ -2521,7 +2522,7 @@ ProcWarpPointer(ClientPtr client)
     WindowPtr	dest = NULL;
     int		x, y, rc;
     ScreenPtr	newScreen;
-    SpritePtr   pSprite = PickPointer(client)->pSprite;
+    SpritePtr   pSprite = PickPointer(client)->spriteInfo->sprite;
 
     REQUEST(xWarpPointerReq);
 
@@ -2609,7 +2610,7 @@ ProcWarpPointer(ClientPtr client)
 static Bool 
 BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin)
 {
-     if(REGION_NOTEMPTY(pDev->pSprite->hotPhys.pScreen, &pWin->borderSize))
+     if(REGION_NOTEMPTY(pDev->spriteInfo->sprite->hotPhys.pScreen, &pWin->borderSize))
 	return TRUE;
 
 #ifdef PANORAMIX
@@ -2617,8 +2618,8 @@ BorderSizeNotEmpty(DeviceIntPtr pDev, Wi
 	int i;
 
 	for(i = 1; i < PanoramiXNumScreens; i++) {
-	    if(REGION_NOTEMPTY(pDev->pSprite->screen, 
-                        &pDev->pSprite->windows[i]->borderSize))
+	    if(REGION_NOTEMPTY(pDev->spriteInfo->sprite->screen, 
+                        &pDev->spriteInfo->sprite->windows[i]->borderSize))
 		return TRUE;
 	}
      }
@@ -2817,7 +2818,7 @@ DeliverGrabbedEvent(xEvent *xE, DeviceIn
     int deliveries = 0;
     DeviceIntPtr dev;
     xEvent *dxE;
-    SpritePtr pSprite = thisDev->pSprite;
+    SpritePtr pSprite = thisDev->spriteInfo->sprite;
 
     if (xE->u.u.type & EXTENSION_EVENT_BASE)
         grabinfo = &thisDev->deviceGrab;
@@ -2988,8 +2989,8 @@ drawable.id:0;
     )))
 #endif
     XE_KBPTR.state = (keyc->state | GetPairedPointer(keybd)->button->state);
-    XE_KBPTR.rootX = keybd->pSprite->hot.x;
-    XE_KBPTR.rootY = keybd->pSprite->hot.y;
+    XE_KBPTR.rootX = keybd->spriteInfo->sprite->hot.x;
+    XE_KBPTR.rootY = keybd->spriteInfo->sprite->hot.y;
     key = xE->u.u.detail;
     kptr = &keyc->down[key >> 3];
     bit = 1 << (key & 7);
@@ -3065,7 +3066,7 @@ drawable.id:0;
     if (grab)
 	DeliverGrabbedEvent(xE, keybd, deactivateGrab, count);
     else
-	DeliverFocusedEvent(keybd, xE, keybd->pSprite->win, count);
+	DeliverFocusedEvent(keybd, xE, keybd->spriteInfo->sprite->win, count);
     if (deactivateGrab)
         (*grabinfo->DeactivateGrab)(keybd);
 
@@ -3117,7 +3118,7 @@ ProcessPointerEvent (xEvent *xE, DeviceI
     GrabPtr	        grab = mouse->coreGrab.grab;
     Bool                deactivateGrab = FALSE;
     ButtonClassPtr      butc = mouse->button;
-    SpritePtr           pSprite = mouse->pSprite;
+    SpritePtr           pSprite = mouse->spriteInfo->sprite;
 
 #ifdef XKB
     XkbSrvInfoPtr xkbi= inputInfo.keyboard->key->xkbInfo;
@@ -3468,8 +3469,8 @@ EnterLeaveEvent(
     event.u.u.type = type;
     event.u.u.detail = detail;
     event.u.enterLeave.time = currentTime.milliseconds;
-    event.u.enterLeave.rootX = pDev->pSprite->hot.x;
-    event.u.enterLeave.rootY = pDev->pSprite->hot.y;
+    event.u.enterLeave.rootX = pDev->spriteInfo->sprite->hot.x;
+    event.u.enterLeave.rootY = pDev->spriteInfo->sprite->hot.y;
     /* Counts on the same initial structure of crossing & button events! */
     FixUpEventFromWindow(mouse, &event, pWin, None, FALSE);
     /* Enter/Leave events always set child */
@@ -3696,7 +3697,7 @@ DoFocusEvents(DeviceIntPtr dev, WindowPt
     int     out, in;		       /* for holding details for to/from
 				          PointerRoot/None */
     int     i;
-    SpritePtr pSprite = dev->pSprite;
+    SpritePtr pSprite = dev->spriteInfo->sprite;
 
     if (fromWin == toWin)
 	return;
@@ -4224,7 +4225,7 @@ ProcQueryPointer(ClientPtr client)
     xQueryPointerReply rep;
     WindowPtr pWin, t;
     DeviceIntPtr mouse = PickPointer(client);
-    SpritePtr pSprite = mouse->pSprite;
+    SpritePtr pSprite = mouse->spriteInfo->sprite;
     int rc;
 
     REQUEST(xResourceReq);
@@ -4343,7 +4344,7 @@ ProcSendEvent(ClientPtr client)
 {
     WindowPtr pWin;
     WindowPtr effectiveFocus = NullWindow; /* only set if dest==InputFocus */
-    SpritePtr pSprite = PickPointer(client)->pSprite;
+    SpritePtr pSprite = PickPointer(client)->spriteInfo->sprite;
     REQUEST(xSendEventReq);
 
     REQUEST_SIZE_MATCH(xSendEventReq);
@@ -4771,7 +4772,7 @@ ProcRecolorCursor(ClientPtr client)
     int		nscr;
     ScreenPtr	pscr;
     Bool 	displayed;
-    SpritePtr   pSprite = PickPointer(client)->pSprite;
+    SpritePtr   pSprite = PickPointer(client)->spriteInfo->sprite;
     REQUEST(xRecolorCursorReq);
 
     REQUEST_SIZE_MATCH(xRecolorCursorReq);
@@ -4914,7 +4915,7 @@ PickPointer(ClientPtr client)
         DeviceIntPtr it = inputInfo.devices;
         while (it)
         {
-            if (it != inputInfo.pointer && it->spriteOwner)
+            if (it != inputInfo.pointer && it->spriteInfo->spriteOwner)
             {
                 client->clientPtr = it;
                 break;
@@ -4947,7 +4948,7 @@ PickKeyboard(ClientPtr client)
     {
         if (ptr != kbd && 
             IsKeyboardDevice(kbd) && 
-            ptr->pSprite == kbd->pSprite)
+            ptr->spriteInfo->sprite == kbd->spriteInfo->sprite)
             return kbd;
         kbd = kbd->next;
     }
diff --git a/dix/getevents.c b/dix/getevents.c
index 3f113fc..e95cadd 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -505,7 +505,7 @@ GetPointerEvents(xEvent *events, DeviceI
     if ((type == ButtonPress || type == ButtonRelease) && !pDev->button)
         return 0;
 
-    if (!coreOnly && (pDev->coreEvents || pDev->isMPDev))
+    if (!coreOnly && (pDev->coreEvents))
         num_events = 2;
     else
         num_events = 1;
@@ -529,10 +529,7 @@ GetPointerEvents(xEvent *events, DeviceI
 
     ms = GetTimeInMillis();
 
-    if (!pDev->coreEvents || pDev->isMPDev)
-        pointer = pDev;
-    else 
-        pointer = inputInfo.pointer;
+    pointer = pDev;
 
     /* Set x and y based on whether this is absolute or relative, and
      * accelerate if we need to. */
@@ -585,11 +582,6 @@ GetPointerEvents(xEvent *events, DeviceI
 
     updateMotionHistory(pDev, ms, first_valuator, num_valuators, valuators);
 
-    if (pDev->coreEvents && !pDev->isMPDev) {
-        /* set the virtual core pointer's coordinates */
-        inputInfo.pointer->valuator->lastx = x;
-        inputInfo.pointer->valuator->lasty = y;
-    }
     pDev->valuator->lastx = x;
     pDev->valuator->lasty = y;
 
@@ -623,8 +615,7 @@ GetPointerEvents(xEvent *events, DeviceI
         }
     }
 
-    /* MPX devices always send core events */
-    if (coreOnly || pDev->coreEvents || pDev->isMPDev) {
+    if (coreOnly || pDev->coreEvents) {
         events->u.u.type = type;
         events->u.keyButtonPointer.time = ms;
         events->u.keyButtonPointer.rootX = x;
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index db39980..a9ce211 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -171,7 +171,7 @@ xf86ActivateDevice(LocalDevicePtr local)
         local->dev = dev;      
         
         dev->coreEvents = local->flags & XI86_ALWAYS_CORE; 
-        dev->isMPDev = !(local->flags & XI86_SHARED_POINTER);
+        dev->spriteInfo->spriteOwner = !(local->flags & XI86_SHARED_POINTER);
 
 #ifdef XKB
         if (!IsPointerDevice(dev))
diff --git a/include/inputstr.h b/include/inputstr.h
index 8c3e560..d4ba811 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -322,6 +322,15 @@ typedef struct _GrabInfoRec {
     } sync;
 } GrabInfoRec, *GrabInfoPtr;
 
+typedef struct _SpriteInfoRec {
+    /* sprite must always point to a valid sprite. For devices sharing the
+     * sprite, let sprite point to a paired spriteOwner's sprite. */
+    SpritePtr           sprite;      /* sprite information */
+    Bool                spriteOwner; /* True if device owns the sprite */
+    DeviceIntPtr        paired;      /* the real owner of the sprite or
+                                        NULL if spriteOwner is TRUE*/
+} SpriteInfoRec, *SpriteInfoPtr;
+
 typedef struct _DeviceIntRec {
     DeviceRec	public;
     DeviceIntPtr next;
@@ -358,13 +367,7 @@ typedef struct _DeviceIntRec {
     DevUnion		*devPrivates;
     int			nPrivates;
     DeviceUnwrapProc    unwrapProc;
-    Bool                isMPDev;           /* TRUE if multipointer device */
-    /* Each device has a sprite. However, keyboards and shared pointers do
-       not in fact own a sprite but rather have their pointer set to the
-       sprite of another device. pSprite always has to point to a valid
-       sprite. spriteOwner indicates whether it is the device's sprite. */
-    SpritePtr           pSprite;        /* sprite information */
-    Bool                spriteOwner;    /* FALSE if shared sprite, see above*/
+    SpriteInfoPtr       spriteInfo;
 } DeviceIntRec;
 
 typedef struct {
diff --git a/mi/mieq.c b/mi/mieq.c
index 6ed5ef3..4949f20 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -115,7 +115,7 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e
                                       &laste->event[0];
 
     /* avoid merging events from different devices */
-    if (e->u.u.type == MotionNotify && pDev->isMPDev)
+    if (e->u.u.type == MotionNotify)
         isMotion = pDev->id;
     else if (e->u.u.type == MotionNotify)
         isMotion = inputInfo.pointer->id;
@@ -235,10 +235,7 @@ mieqProcessInputEvents()
             else if (e->event[0].u.u.type == MotionNotify ||
                      e->event[0].u.u.type == ButtonPress ||
                      e->event[0].u.u.type == ButtonRelease) {
-                if (!e->pDev->isMPDev)
-                    SwitchCorePointer(e->pDev);
                 dev = inputInfo.pointer;
-
             }
             else {
                 dev = e->pDev;
@@ -252,8 +249,7 @@ mieqProcessInputEvents()
         }
 
         /* Update the sprite now. Next event may be from different device. */
-        if (e->event[0].u.u.type == MotionNotify && 
-                (e->pDev->isMPDev || e->pDev->coreEvents))
+        if (e->event[0].u.u.type == MotionNotify && e->pDev->coreEvents)
         {
             miPointerUpdateSprite(e->pDev);
         }
diff --git a/mi/mipointer.c b/mi/mipointer.c
index edb5c5f..3c09064 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -346,8 +346,7 @@ miPointerUpdateSprite (DeviceIntPtr pDev
     int			x, y, devx, devy;
     miPointerPtr        pPointer;
 
-    if (!pDev || pDev == inputInfo.pointer || 
-            !(pDev->coreEvents || pDev->isMPDev))
+    if (!pDev || pDev == inputInfo.pointer || !pDev->coreEvents)
         return;
 
     pPointer = MIPOINTER(pDev);
@@ -481,8 +480,7 @@ miPointerSetPosition(DeviceIntPtr pDev, 
     if (!pScreen)
 	return;	    /* called before ready */
 
-    if (!pDev || 
-            !(pDev->coreEvents || pDev == inputInfo.pointer || pDev->isMPDev))
+    if (!pDev || !(pDev->coreEvents || pDev == inputInfo.pointer))
         return;
 
     if (*x < 0 || *x >= pScreen->width || *y < 0 || *y >= pScreen->height)
@@ -574,7 +572,7 @@ miPointerMoved (DeviceIntPtr pDev, Scree
     SetupScreen(pScreen);
 
 
-    if (pDev && (pDev->coreEvents || pDev == inputInfo.pointer || pDev->isMPDev)
+    if (pDev && (pDev->coreEvents || pDev == inputInfo.pointer)
         && !pScreenPriv->waitForUpdate && pScreen == pPointer->pSpriteScreen)
     {
 	pPointer->devx = x;



More information about the xorg-commit mailing list