dix: add real_event parameter to ActivatePassiveGrab
For touch events with pointer emulation, the event that triggers the grab (the pointer event) is not the same as the actual event (the touch event). For replaying, we need to store the real event then. No effective changes at this point, for the current caller event and real_event are identical. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
parent
e389a19a73
commit
c3843f5498
10
dix/events.c
10
dix/events.c
|
@ -3643,11 +3643,15 @@ BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin)
|
|||
* @param device The device of the event to check.
|
||||
* @param grab The grab to check.
|
||||
* @param event The current device event.
|
||||
* @param real_event The original event, in case of touch emulation. The
|
||||
* real event is the one stored in the sync queue.
|
||||
*
|
||||
* @return Whether the grab has been activated.
|
||||
*/
|
||||
Bool
|
||||
ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event)
|
||||
ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
|
||||
InternalEvent *real_event)
|
||||
|
||||
{
|
||||
SpritePtr pSprite = device->spriteInfo->sprite;
|
||||
GrabInfoPtr grabinfo = &device->deviceGrab;
|
||||
|
@ -3719,7 +3723,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event)
|
|||
|
||||
if (grabinfo->sync.state == FROZEN_NO_EVENT)
|
||||
grabinfo->sync.state = FROZEN_WITH_EVENT;
|
||||
*grabinfo->sync.event = event->device_event;
|
||||
*grabinfo->sync.event = real_event->device_event;
|
||||
|
||||
free(xE);
|
||||
return TRUE;
|
||||
|
@ -3943,7 +3947,7 @@ CheckPassiveGrabsOnWindow(
|
|||
if (!CheckPassiveGrab(device, grab, event, checkCore, tempGrab))
|
||||
continue;
|
||||
|
||||
if (activate && !ActivatePassiveGrab(device, grab, event))
|
||||
if (activate && !ActivatePassiveGrab(device, grab, event, event))
|
||||
continue;
|
||||
|
||||
break;
|
||||
|
|
|
@ -634,7 +634,7 @@ void FixUpEventFromWindow(SpritePtr pSprite,
|
|||
extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y);
|
||||
extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win);
|
||||
extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab,
|
||||
InternalEvent *ev);
|
||||
InternalEvent *ev, InternalEvent *real_event);
|
||||
/**
|
||||
* Masks specifying the type of event to deliver for an InternalEvent; used
|
||||
* by EventIsDeliverable.
|
||||
|
|
Loading…
Reference in New Issue
Block a user