Merge remote-tracking branch 'whot/multitouch'

This commit is contained in:
Keith Packard 2012-01-09 13:17:37 -08:00
commit e476af417d
3 changed files with 15 additions and 11 deletions

View File

@ -1159,13 +1159,11 @@ TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
DeliverTouchEvents(sourcedev, ti, tel + i, ev->resource);
}
/* If there are no other listeners left, then don't bother sending an
* ownership change event to no-one; if the touchpoint is pending
/* If there are no other listeners left, and the touchpoint is pending
* finish, then we can just kill it now. */
if (ti->num_listeners == 1)
if (ti->num_listeners == 1 && ti->pending_finish)
{
if (ti->pending_finish)
TouchEndTouch(sourcedev, ti);
TouchEndTouch(sourcedev, ti);
goto out;
}
@ -1178,9 +1176,9 @@ TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
ti->num_grabs--;
}
/* If the current owner was removed, deliver the TouchOwnership or TouchBegin
event to the new owner. */
if (was_owner)
/* If the current owner was removed and there are further listeners, deliver
* the TouchOwnership or TouchBegin event to the new owner. */
if (ti->num_listeners > 0 && was_owner)
TouchPuntToNextOwner(sourcedev, ti, ev);
out:
@ -1803,8 +1801,10 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
listener->state = LISTENER_HAS_END;
}
if (ti->num_listeners > 1 &&
(ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0)
if ((ti->num_listeners > 1 ||
(listener->type == LISTENER_GRAB &&
xi2mask_isset(xi2mask, dev, XI_TouchOwnership))) &&
(ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0)
{
ev->any.type = ET_TouchUpdate;
ev->device_event.flags |= TOUCH_PENDING_END;

View File

@ -776,7 +776,7 @@ XPROTO="xproto >= 7.0.22"
RANDRPROTO="randrproto >= 1.2.99.3"
RENDERPROTO="renderproto >= 0.11"
XEXTPROTO="xextproto >= 7.1.99"
INPUTPROTO="inputproto >= 2.1.99.3"
INPUTPROTO="inputproto >= 2.1.99.5"
KBPROTO="kbproto >= 1.0.3"
FONTSPROTO="fontsproto"
FIXESPROTO="fixesproto >= 5.0"

View File

@ -691,6 +691,10 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
else
xde->flags = ev->flags;
if (IsTouchEvent((InternalEvent*)ev) &&
ev->flags & TOUCH_POINTER_EMULATED)
xde->flags |= XITouchEmulatingPointer;
if (ev->key_repeat)
xde->flags |= XIKeyRepeat;