Split out helper function TouchListenerAcceptReject()

This will be used for accepting and rejecting touches in the future.

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Chase Douglas 2012-04-11 08:12:08 -07:00 committed by Chase Douglas
parent 93c3340364
commit 447fe7a1a7
3 changed files with 43 additions and 34 deletions

View File

@ -1273,18 +1273,11 @@ ComputeFreezes(void)
event->root_x, event->root_y); event->root_x, event->root_y);
if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin)) { if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin)) {
if (IsTouchEvent((InternalEvent *) event)) { if (IsTouchEvent((InternalEvent *) event)) {
InternalEvent *events = InitEventList(GetMaximumEventsNum());
int i, nev;
TouchPointInfoPtr ti = TouchPointInfoPtr ti =
TouchFindByClientID(replayDev, event->touchid); TouchFindByClientID(replayDev, event->touchid);
BUG_WARN(!ti); BUG_WARN(!ti);
nev =
GetTouchOwnershipEvents(events, replayDev, ti, TouchListenerAcceptReject(replayDev, ti, 0, XIRejectTouch);
XIRejectTouch,
ti->listeners[0].listener, 0);
for (i = 0; i < nev; i++)
mieqProcessDeviceEvent(replayDev, events + i, NULL);
ProcessInputEvents();
} }
else if (replayDev->focus && else if (replayDev->focus &&
!IsPointerEvent((InternalEvent *) event)) !IsPointerEvent((InternalEvent *) event))

View File

@ -959,16 +959,49 @@ TouchListenerGone(XID resource)
FreeEventList(events, GetMaximumEventsNum()); 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 int
TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
uint32_t touchid, Window grab_window, XID *error) uint32_t touchid, Window grab_window, XID *error)
{ {
TouchPointInfoPtr ti; TouchPointInfoPtr ti;
int nev, i; int i;
InternalEvent *events = InitEventList(GetMaximumEventsNum());
if (!events)
return BadAlloc;
if (!dev->touch) { if (!dev->touch) {
*error = dev->id; *error = dev->id;
@ -989,24 +1022,5 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
if (i == ti->num_listeners) if (i == ti->num_listeners)
return BadAccess; return BadAccess;
if (i > 0) { return TouchListenerAcceptReject(dev, ti, i, mode);
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;
} }

View File

@ -572,6 +572,8 @@ extern int TouchConvertToPointerEvent(const InternalEvent *ev,
extern int TouchGetPointerEventType(const InternalEvent *ev); extern int TouchGetPointerEventType(const InternalEvent *ev);
extern void TouchRemovePointerGrab(DeviceIntPtr dev); extern void TouchRemovePointerGrab(DeviceIntPtr dev);
extern void TouchListenerGone(XID resource); 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, extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
uint32_t touchid, Window grab_window, XID *error); uint32_t touchid, Window grab_window, XID *error);