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:
Peter Hutterer 2011-12-14 17:02:30 +10:00
parent e389a19a73
commit c3843f5498
2 changed files with 8 additions and 4 deletions

View File

@ -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;

View File

@ -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.