From 36f8dacc0652ddc5657e70942269f1f9e22710c6 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sat, 10 Oct 2020 02:51:37 +0300 Subject: [PATCH] dix: Extract ActivateGrabNoDeliver() --- dix/events.c | 27 +++++++++++++++++++++------ include/input.h | 3 +++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/dix/events.c b/dix/events.c index 75ac0330b..22880008a 100644 --- a/dix/events.c +++ b/dix/events.c @@ -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 diff --git a/include/input.h b/include/input.h index 78c8246aa..0208562d9 100644 --- a/include/input.h +++ b/include/input.h @@ -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.