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

View File

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

View File

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