On Fri, Dec 17, 2010 at 05:13:28PM +0000, Daniel Stone wrote: > Since FixUpEventFromWindow only uses the sprite trace to determine the > window stack, pass in a sprite instead of hardcoding the device sprite, > so we can deliver to windows other than the one currently containing the > sprite. > > Signed-off-by: Daniel Stone <[email protected]> > --- > Xi/exevents.c | 3 ++- > dix/events.c | 43 +++++++++++++++++++++---------------------- > include/input.h | 3 ++- > include/inputstr.h | 4 ++-- > 4 files changed, 27 insertions(+), 26 deletions(-) > > diff --git a/Xi/exevents.c b/Xi/exevents.c > index 8615fd4..327873e 100644 > --- a/Xi/exevents.c > +++ b/Xi/exevents.c > @@ -1261,7 +1261,8 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, > int detail, > xi2event->group.effective_group = dev->key->xkbInfo->state.group; > } > > - FixUpEventFromWindow(dev, (xEvent*)xi2event, pWin, None, FALSE); > + FixUpEventFromWindow(dev->spriteInfo->sprite, (xEvent*)xi2event, pWin, > + None, FALSE); > > DeliverEventsToWindow(dev, pWin, (xEvent*)xi2event, 1, > GetEventFilter(dev, (xEvent*)xi2event), NullGrab); > diff --git a/dix/events.c b/dix/events.c > index 4e2dd89..4aa71c1 100644 > --- a/dix/events.c > +++ b/dix/events.c > @@ -2181,9 +2181,8 @@ MaybeDeliverEventsToClient(WindowPtr pWin, xEvent > *pEvents, > return 2; > } > > -static Window FindChildForEvent(DeviceIntPtr dev, WindowPtr event) > +static Window FindChildForEvent(SpritePtr pSprite, WindowPtr event) > { > - SpritePtr pSprite = dev->spriteInfo->sprite; > WindowPtr w = pSprite->spriteTrace[pSprite->spriteTraceGood-1]; > Window child = None; > > @@ -2222,16 +2221,14 @@ static Window FindChildForEvent(DeviceIntPtr dev, > WindowPtr event) > */ > void > FixUpEventFromWindow( > - DeviceIntPtr pDev, > + SpritePtr pSprite, > xEvent *xE, > WindowPtr pWin, > Window child, > Bool calcChild) > { > - SpritePtr pSprite = pDev->spriteInfo->sprite; > - > if (calcChild) > - child = FindChildForEvent(pDev, pWin); > + child = FindChildForEvent(pSprite, pWin); > > if (XI2_EVENT(xE)) > { > @@ -2247,7 +2244,7 @@ FixUpEventFromWindow( > event->evtype == XI_PropertyEvent) > return; > > - event->root = RootWindow(pDev)->drawable.id; > + event->root = pSprite->spriteTrace[0]->drawable.id; > event->event = pWin->drawable.id; > if (pSprite->hot.pScreen == pWin->drawable.pScreen) > { > @@ -2268,7 +2265,7 @@ FixUpEventFromWindow( > > } else > { > - XE_KBPTR.root = RootWindow(pDev)->drawable.id; > + XE_KBPTR.root = pSprite->spriteTrace[0]->drawable.id;
can you please add a macro similar to RootWindow() so the code is more obvious to read. is RootWindow() still used now? maybe you can just change that. other than that, Reviewed-by: Peter Hutterer <[email protected]> please send me an updated patch and i'll include it in my next pull. Cheers, Peter > XE_KBPTR.event = pWin->drawable.id; > if (pSprite->hot.pScreen == pWin->drawable.pScreen) > { > @@ -2385,6 +2382,7 @@ int > DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab, > WindowPtr stopAt, DeviceIntPtr dev) > { > + SpritePtr pSprite = dev->spriteInfo->sprite; > Window child = None; > Mask filter; > int deliveries = 0; > @@ -2407,7 +2405,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent > *event, GrabPtr grab, > { > /* XXX: XACE */ > filter = GetEventFilter(dev, xi2); > - FixUpEventFromWindow(dev, xi2, pWin, child, FALSE); > + FixUpEventFromWindow(pSprite, xi2, pWin, child, FALSE); > deliveries = DeliverEventsToWindow(dev, pWin, xi2, 1, > filter, grab); > free(xi2); > @@ -2425,7 +2423,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent > *event, GrabPtr grab, > if (rc == Success) { > if (XaceHook(XACE_SEND_ACCESS, NULL, dev, pWin, xE, > count) == Success) { > filter = GetEventFilter(dev, xE); > - FixUpEventFromWindow(dev, xE, pWin, child, FALSE); > + FixUpEventFromWindow(pSprite, xE, pWin, child, > FALSE); > deliveries = DeliverEventsToWindow(dev, pWin, xE, > count, > filter, grab); > if (deliveries > 0) > @@ -2443,7 +2441,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent > *event, GrabPtr grab, > if (rc == Success) { > if (XaceHook(XACE_SEND_ACCESS, NULL, dev, pWin, &core, > 1) == Success) { > filter = GetEventFilter(dev, &core); > - FixUpEventFromWindow(dev, &core, pWin, child, FALSE); > + FixUpEventFromWindow(pSprite, &core, pWin, child, > FALSE); > deliveries = DeliverEventsToWindow(dev, pWin, &core, > 1, > filter, grab); > if (deliveries > 0) > @@ -3378,6 +3376,7 @@ CheckPassiveGrabsOnWindow( > DeviceEvent *event, > BOOL checkCore) > { > + SpritePtr pSprite = device->spriteInfo->sprite; > GrabPtr grab = wPassiveGrabs(pWin); > GrabRec tempGrab; > GrabInfoPtr grabinfo; > @@ -3541,7 +3540,7 @@ CheckPassiveGrabsOnWindow( > > if (xE) > { > - FixUpEventFromWindow(device, xE, grab->window, None, TRUE); > + FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); > > TryClientEvents(rClient(grab), device, xE, count, > GetEventFilter(device, xE), > @@ -3693,7 +3692,7 @@ DeliverFocusedEvent(DeviceIntPtr keybd, InternalEvent > *event, WindowPtr window) > { > /* XXX: XACE */ > int filter = GetEventFilter(keybd, xi2); > - FixUpEventFromWindow(ptr, xi2, focus, None, FALSE); > + FixUpEventFromWindow(ptr->spriteInfo->sprite, xi2, focus, None, > FALSE); > deliveries = DeliverEventsToWindow(keybd, focus, xi2, 1, > filter, NullGrab); > if (deliveries > 0) > @@ -3706,7 +3705,7 @@ DeliverFocusedEvent(DeviceIntPtr keybd, InternalEvent > *event, WindowPtr window) > if (rc == Success && > XaceHook(XACE_SEND_ACCESS, NULL, keybd, focus, xE, count) == Success) > { > - FixUpEventFromWindow(ptr, xE, focus, None, FALSE); > + FixUpEventFromWindow(ptr->spriteInfo->sprite, xE, focus, None, > FALSE); > deliveries = DeliverEventsToWindow(keybd, focus, xE, count, > GetEventFilter(keybd, xE), > NullGrab); > @@ -3722,7 +3721,8 @@ DeliverFocusedEvent(DeviceIntPtr keybd, InternalEvent > *event, WindowPtr window) > rc = EventToCore(event, &core); > if (rc == Success) { > if (XaceHook(XACE_SEND_ACCESS, NULL, keybd, focus, &core, 1) == > Success) { > - FixUpEventFromWindow(keybd, &core, focus, None, FALSE); > + FixUpEventFromWindow(keybd->spriteInfo->sprite, &core, focus, > + None, FALSE); > deliveries = DeliverEventsToWindow(keybd, focus, &core, 1, > GetEventFilter(keybd, > &core), > NullGrab); > @@ -3812,8 +3812,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr > thisDev, > rc = EventToCore(event, &core); > if (rc == Success) > { > - FixUpEventFromWindow(thisDev, &core, grab->window, > - None, TRUE); > + FixUpEventFromWindow(pSprite, &core, grab->window, None, > TRUE); > if (XaceHook(XACE_SEND_ACCESS, 0, thisDev, > grab->window, &core, 1) || > XaceHook(XACE_RECEIVE_ACCESS, rClient(grab), > @@ -3840,7 +3839,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr > thisDev, > grab->xi2mask[XIAllMasterDevices][evtype/8] | > grab->xi2mask[thisDev->id][evtype/8]; > /* try XI2 event */ > - FixUpEventFromWindow(thisDev, xi2, grab->window, None, TRUE); > + FixUpEventFromWindow(pSprite, xi2, grab->window, None, TRUE); > /* XXX: XACE */ > deliveries = TryClientEvents(rClient(grab), thisDev, xi2, 1, > mask, > GetEventFilter(thisDev, xi2), grab); > @@ -3861,8 +3860,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr > thisDev, > else > mask = grab->eventMask; > > - FixUpEventFromWindow(thisDev, xi, grab->window, > - None, TRUE); > + FixUpEventFromWindow(pSprite, xi, grab->window, None, TRUE); > > if (XaceHook(XACE_SEND_ACCESS, 0, thisDev, > grab->window, xi, count) || > @@ -4208,7 +4206,7 @@ CoreEnterLeaveEvent( > event.u.enterLeave.rootX = mouse->spriteInfo->sprite->hot.x; > event.u.enterLeave.rootY = mouse->spriteInfo->sprite->hot.y; > /* Counts on the same initial structure of crossing & button events! */ > - FixUpEventFromWindow(mouse, &event, pWin, None, FALSE); > + FixUpEventFromWindow(mouse->spriteInfo->sprite, &event, pWin, None, > FALSE); > /* Enter/Leave events always set child */ > event.u.enterLeave.child = child; > event.u.enterLeave.flags = event.u.keyButtonPointer.sameScreen ? > @@ -4308,7 +4306,8 @@ DeviceEnterLeaveEvent( > event->group.locked_group = kbd->key->xkbInfo->state.locked_group; > } > > - FixUpEventFromWindow(mouse, (xEvent*)event, pWin, None, FALSE); > + FixUpEventFromWindow(mouse->spriteInfo->sprite, (xEvent*)event, pWin, > + None, FALSE); > > filter = GetEventFilter(mouse, (xEvent*)event); > > diff --git a/include/input.h b/include/input.h > index fef69a1..31fdc52 100644 > --- a/include/input.h > +++ b/include/input.h > @@ -103,6 +103,7 @@ typedef struct _OtherClients *OtherClientsPtr; > typedef struct _InputClients *InputClientsPtr; > typedef struct _DeviceIntRec *DeviceIntPtr; > typedef struct _ClassesRec *ClassesPtr; > +typedef struct _SpriteRec *SpritePtr; > typedef union _GrabMask GrabMask; > > typedef struct _EventList { > @@ -527,7 +528,7 @@ extern _X_EXPORT void FreeInputAttributes(InputAttributes > *attrs); > /* misc event helpers */ > extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event); > extern Mask GetWindowXI2Mask(DeviceIntPtr dev, WindowPtr win, xEvent* ev); > -void FixUpEventFromWindow(DeviceIntPtr pDev, > +void FixUpEventFromWindow(SpritePtr pSprite, > xEvent *xE, > WindowPtr pWin, > Window child, > diff --git a/include/inputstr.h b/include/inputstr.h > index 44de9c4..bada398 100644 > --- a/include/inputstr.h > +++ b/include/inputstr.h > @@ -363,7 +363,7 @@ typedef struct _ClassesRec { > /** > * Sprite information for a device. > */ > -typedef struct { > +typedef struct _SpriteRec { > CursorPtr current; > BoxRec hotLimits; /* logical constraints of hot spot */ > Bool confined; /* confined to screen */ > @@ -399,7 +399,7 @@ typedef struct { > ScreenPtr pEnqueueScreen; > ScreenPtr pDequeueScreen; > > -} SpriteRec, *SpritePtr; > +} SpriteRec; > > /* Device properties */ > typedef struct _XIPropertyValue > -- > 1.7.2.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
