dix: Extract ActivateGrabNoDeliver()

This commit is contained in:
Povilas Kanapickas 2020-10-10 02:51:37 +03:00 committed by Peter Hutterer
parent 23a8b62d34
commit 36f8dacc06
2 changed files with 24 additions and 6 deletions

View File

@ -3669,7 +3669,6 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
InternalEvent *real_event)
{
SpritePtr pSprite = device->spriteInfo->sprite;
GrabInfoPtr grabinfo = &device->deviceGrab;
xEvent *xE = NULL;
int count;
int rc;
@ -3719,8 +3718,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
}
}
(*grabinfo->ActivateGrab) (device, grab,
ClientTimeToServerTime(event->any.time), TRUE);
ActivateGrabNoDelivery(device, grab, event, real_event);
if (xE) {
FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE);
@ -3731,12 +3729,29 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
GetEventFilter(device, xE), grab);
}
free(xE);
return TRUE;
}
/**
* Activates a grab without event delivery.
*
* @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.
*/
void ActivateGrabNoDelivery(DeviceIntPtr dev, GrabPtr grab,
InternalEvent *event, InternalEvent *real_event)
{
GrabInfoPtr grabinfo = &dev->deviceGrab;
(*grabinfo->ActivateGrab) (dev, grab,
ClientTimeToServerTime(event->any.time), TRUE);
if (grabinfo->sync.state == FROZEN_NO_EVENT)
grabinfo->sync.state = FROZEN_WITH_EVENT;
*grabinfo->sync.event = *real_event;
free(xE);
return TRUE;
}
static BOOL

View File

@ -630,6 +630,9 @@ 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 *real_event);
extern void ActivateGrabNoDelivery(DeviceIntPtr dev, GrabPtr grab,
InternalEvent *event,
InternalEvent *real_event);
/**
* Masks specifying the type of event to deliver for an InternalEvent; used
* by EventIsDeliverable.