From 2bb2eeb05c973ba410773e380e49c2503a2fe9e6 Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Wed, 11 Apr 2012 08:12:08 -0700 Subject: Split out helper function TouchListenerAcceptReject() This will be used for accepting and rejecting touches in the future. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer (cherry picked from commit 447fe7a1a72513aa68145962c47894242c589cc9) --- dix/events.c | 11 ++-------- dix/touch.c | 64 +++++++++++++++++++++++++++++++++++---------------------- include/input.h | 2 ++ 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/dix/events.c b/dix/events.c index 8b7d4606b..30e335695 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1272,18 +1272,11 @@ ComputeFreezes(void) event->root_x, event->root_y); if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin)) { if (IsTouchEvent((InternalEvent *) event)) { - InternalEvent *events = InitEventList(GetMaximumEventsNum()); - int i, nev; TouchPointInfoPtr ti = TouchFindByClientID(replayDev, event->touchid); BUG_WARN(!ti); - nev = - GetTouchOwnershipEvents(events, replayDev, ti, - XIRejectTouch, - ti->listeners[0].listener, 0); - for (i = 0; i < nev; i++) - mieqProcessDeviceEvent(replayDev, events + i, NULL); - ProcessInputEvents(); + + TouchListenerAcceptReject(replayDev, ti, 0, XIRejectTouch); } else if (replayDev->focus && !IsPointerEvent((InternalEvent *) event)) diff --git a/dix/touch.c b/dix/touch.c index 0829b6545..72faad546 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -959,16 +959,49 @@ TouchListenerGone(XID resource) FreeEventList(events, GetMaximumEventsNum()); } +int +TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti, int listener, + int mode) +{ + InternalEvent *events; + int nev; + int i; + + if (listener > 0) { + if (mode == XIRejectTouch) + TouchRejected(dev, ti, ti->listeners[listener].listener, NULL); + else + ti->listeners[listener].state = LISTENER_EARLY_ACCEPT; + + return Success; + } + + events = InitEventList(GetMaximumEventsNum()); + if (!events) { + BUG_WARN_MSG(TRUE, "Failed to allocate touch ownership events\n"); + return BadAlloc; + } + + nev = GetTouchOwnershipEvents(events, dev, ti, mode, + ti->listeners[0].listener, 0); + BUG_WARN_MSG(nev == 0, "Failed to get touch ownership events\n"); + + for (i = 0; i < nev; i++) + mieqProcessDeviceEvent(dev, events + i, NULL); + + ProcessInputEvents(); + + FreeEventList(events, GetMaximumEventsNum()); + + return nev ? Success : BadMatch; +} + int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, uint32_t touchid, Window grab_window, XID *error) { TouchPointInfoPtr ti; - int nev, i; - InternalEvent *events = InitEventList(GetMaximumEventsNum()); - - if (!events) - return BadAlloc; + int i; if (!dev->touch) { *error = dev->id; @@ -989,24 +1022,5 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, if (i == ti->num_listeners) return BadAccess; - if (i > 0) { - if (mode == XIRejectTouch) - TouchRejected(dev, ti, ti->listeners[i].listener, NULL); - else - ti->listeners[i].state = LISTENER_EARLY_ACCEPT; - - return Success; - } - - nev = GetTouchOwnershipEvents(events, dev, ti, mode, - ti->listeners[0].listener, 0); - if (nev == 0) - return BadAlloc; - for (i = 0; i < nev; i++) - mieqProcessDeviceEvent(dev, events + i, NULL); - - ProcessInputEvents(); - - FreeEventList(events, GetMaximumEventsNum()); - return Success; + return TouchListenerAcceptReject(dev, ti, i, mode); } diff --git a/include/input.h b/include/input.h index d891fe5db..9a6fdfe6f 100644 --- a/include/input.h +++ b/include/input.h @@ -572,6 +572,8 @@ extern int TouchConvertToPointerEvent(const InternalEvent *ev, extern int TouchGetPointerEventType(const InternalEvent *ev); extern void TouchRemovePointerGrab(DeviceIntPtr dev); extern void TouchListenerGone(XID resource); +extern int TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti, + int listener, int mode); extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, uint32_t touchid, Window grab_window, XID *error); -- cgit v1.2.3