[PATCH 04/11] dix: split implicit grab activation into a separate function.
Peter Hutterer
peter.hutterer at who-t.net
Wed May 11 18:52:31 PDT 2011
On Wed, May 11, 2011 at 02:08:28PM -0700, Jamey Sharp wrote:
> I'm not sure I like splitting the check for button-press event from the
> code which makes assumptions about that check. How about replacing
> patches 3 and 4 with this patch instead?
merged instead, thanks.
Cheers,
Peter
>
> ---
> From b6f41db623516ca52d3c5977758c4f298beeee97 Mon Sep 17 00:00:00 2001
> From: Jamey Sharp <jamey at minilop.net>
> Date: Wed, 11 May 2011 13:58:50 -0700
> Subject: [PATCH] dix: split implicit grab activation into a separate
> function.
>
> No functional changes, just for readability. This patch was inspired by
> a pair of similar patches by Peter Hutterer, but takes slightly
> different boundaries between functions.
>
> Signed-off-by: Jamey Sharp <jamey at minilop.net>
> ---
> dix/events.c | 91 ++++++++++++++++++++++++++++++++--------------------------
> 1 files changed, 50 insertions(+), 41 deletions(-)
>
> diff --git a/dix/events.c b/dix/events.c
> index d70d62f..86192c2 100644
> --- a/dix/events.c
> +++ b/dix/events.c
> @@ -1937,6 +1937,54 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
> return 1;
> }
>
> +static BOOL
> +ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win,
> + xEvent *event, Mask deliveryMask)
> +{
> + GrabRec tempGrab;
> + OtherInputMasks *inputMasks;
> + CARD8 type = event->u.u.type;
> + GrabType grabtype;
> +
> + if (type == ButtonPress)
> + grabtype = GRABTYPE_CORE;
> + else if (type == DeviceButtonPress)
> + grabtype = GRABTYPE_XI;
> + else if (XI2_EVENT(event) && ((xGenericEvent*)event)->evtype == XI_ButtonPress)
> + {
> + type = ((xGenericEvent*)event)->evtype;
> + grabtype = GRABTYPE_XI2;
> + }
> + else
> + return FALSE;
> +
> + memset(&tempGrab, 0, sizeof(GrabRec));
> + tempGrab.next = NULL;
> + tempGrab.device = dev;
> + tempGrab.resource = client->clientAsMask;
> + tempGrab.window = win;
> + tempGrab.ownerEvents = (deliveryMask & OwnerGrabButtonMask) ? TRUE : FALSE;
> + tempGrab.eventMask = deliveryMask;
> + tempGrab.keyboardMode = GrabModeAsync;
> + tempGrab.pointerMode = GrabModeAsync;
> + tempGrab.confineTo = NullWindow;
> + tempGrab.cursor = NullCursor;
> + tempGrab.type = type;
> + tempGrab.grabtype = grabtype;
> +
> + /* get the XI and XI2 device mask */
> + inputMasks = wOtherInputMasks(win);
> + tempGrab.deviceMask = (inputMasks) ? inputMasks->inputEvents[dev->id]: 0;
> +
> + if (inputMasks)
> + memcpy(tempGrab.xi2mask, inputMasks->xi2mask,
> + sizeof(tempGrab.xi2mask));
> +
> + (*dev->deviceGrab.ActivateGrab)(dev, &tempGrab,
> + currentTime, TRUE | ImplicitGrabMask);
> + return TRUE;
> +}
> +
> /**
> * Deliver events to a window. At this point, we do not yet know if the event
> * actually needs to be delivered. May activate a grab if the event is a
> @@ -2048,47 +2096,8 @@ DeliverEventsToWindow(DeviceIntPtr pDev, WindowPtr pWin, xEvent
> * Note that since core events are delivered first, an implicit grab may
> * be activated on a core grab, stopping the XI events.
> */
> - if ((type == DeviceButtonPress || type == ButtonPress ||
> - ((XI2_EVENT(pEvents) && ((xGenericEvent*)pEvents)->evtype == XI_ButtonPress)))
> - && deliveries
> - && (!grab))
> - {
> - GrabRec tempGrab;
> - OtherInputMasks *inputMasks;
> -
> - memset(&tempGrab, 0, sizeof(GrabRec));
> - tempGrab.next = NULL;
> - tempGrab.device = pDev;
> - tempGrab.resource = client->clientAsMask;
> - tempGrab.window = pWin;
> - tempGrab.ownerEvents = (deliveryMask & OwnerGrabButtonMask) ? TRUE : FALSE;
> - tempGrab.eventMask = deliveryMask;
> - tempGrab.keyboardMode = GrabModeAsync;
> - tempGrab.pointerMode = GrabModeAsync;
> - tempGrab.confineTo = NullWindow;
> - tempGrab.cursor = NullCursor;
> - tempGrab.type = type;
> - if (type == ButtonPress)
> - tempGrab.grabtype = GRABTYPE_CORE;
> - else if (type == DeviceButtonPress)
> - tempGrab.grabtype = GRABTYPE_XI;
> - else
> - {
> - tempGrab.type = ((xGenericEvent*)pEvents)->evtype;
> - tempGrab.grabtype = GRABTYPE_XI2;
> - }
> -
> - /* get the XI and XI2 device mask */
> - inputMasks = wOtherInputMasks(pWin);
> - tempGrab.deviceMask = (inputMasks) ? inputMasks->inputEvents[pDev->id]: 0;
> -
> - if (inputMasks)
> - memcpy(tempGrab.xi2mask, inputMasks->xi2mask,
> - sizeof(tempGrab.xi2mask));
> -
> - (*pDev->deviceGrab.ActivateGrab)(pDev, &tempGrab,
> - currentTime, TRUE | ImplicitGrabMask);
> - }
> + if (deliveries && !grab && ActivateImplicitGrab(pDev, client, pWin, pEvents, deliveryMask))
> + /* grab activated */;
> else if ((type == MotionNotify) && deliveries)
> pDev->valuator->motionHintWindow = pWin;
> else
> --
> 1.7.4.4
>
More information about the xorg-devel
mailing list