diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-03-25 15:00:03 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-03-25 15:00:03 +0930 |
commit | 5f9c10e8da0d9d96cc00a38cdf9a8c3030063e03 (patch) | |
tree | 266601462296fe3e51633e066c1fd9a287346fc0 | |
parent | e54311395e1e7ae458c8ce59da0914706c4a04f6 (diff) |
Clean up DeviceIntPtr, prepare for Server 1.4 ABI. Move sprite-related
information into a new SpriteInfoRec, remove isMPDev flag.
-rw-r--r-- | Xi/querydp.c | 4 | ||||
-rw-r--r-- | Xi/warpdevp.c | 2 | ||||
-rw-r--r-- | dix/devices.c | 34 | ||||
-rw-r--r-- | dix/events.c | 133 | ||||
-rw-r--r-- | dix/getevents.c | 15 | ||||
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 2 | ||||
-rw-r--r-- | include/inputstr.h | 17 | ||||
-rw-r--r-- | mi/mieq.c | 8 | ||||
-rw-r--r-- | mi/mipointer.c | 8 |
9 files changed, 111 insertions, 112 deletions
diff --git a/Xi/querydp.c b/Xi/querydp.c index a24dad0a5..af93fed2f 100644 --- a/Xi/querydp.c +++ b/Xi/querydp.c @@ -101,7 +101,7 @@ ProcXQueryDevicePointer(register ClientPtr client) 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 ClientPtr client) 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 a9ddb0b6b..8df7e14db 100644 --- a/Xi/warpdevp.c +++ b/Xi/warpdevp.c @@ -102,7 +102,7 @@ ProcXWarpDevicePointer(register ClientPtr client) } } - 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 10843d456..724ef982d 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -147,6 +147,13 @@ AddInputDevice(DeviceProc deviceProc, Bool autoStart) 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, DeviceIntPtr ptr, DeviceIntPtr kbd) 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 65d6eaed6..9f7e08de7 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 pDev); #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(DeviceIntPtr pDev, WindowPtr pWin, Bool generateEvents) { - SpritePtr pSprite = pDev->pSprite; + SpritePtr pSprite = pDev->spriteInfo->sprite; if (syncEvents.playingEvents) { @@ -683,7 +683,7 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev, 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, RegionPtr shape, int *px, int *py) 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, WindowPtr pWin, Bool generateEvents, Bo _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 device, int count) 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, GrabPtr grab, { 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, GrabPtr grab, TimeStamp time, Bool pass 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 keybd) 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 win, int xoff, int yoff) { 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, WindowPtr pWin) 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, WindowPtr pWin) 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, DeviceIntPtr thisDev, 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, DeviceIntPtr mouse, int count) 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, WindowPtr fromWin, WindowPtr toWin, int mode) 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 3f113fc8f..e95caddd7 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -505,7 +505,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons, 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, DeviceIntPtr pDev, int type, int buttons, 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, DeviceIntPtr pDev, int type, int buttons, 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, DeviceIntPtr pDev, int type, int buttons, } } - /* 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 db3998025..a9ce21156 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 8c3e5604d..d4ba81158 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 { @@ -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 edb5c5fec..3c09064c7 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, int *x, int *y, unsigned long time) 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, ScreenPtr pScreen, int x, int y, 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; |