xserver-multidpi/dix
Peter Hutterer 35c2e263db dix: call UpdateDeviceState() for emulated TouchEndEvents
ProcessTouchEvents() calls UDS for all touch events, but if the event type
was switched to TouchUpdate(pending end) UDS is a noop.

Daniel Drake found this can cause stuck buttons if a touch grab is
activated, rejected and the touch event is passed to a regular listener.
This sequence causes the TouchEnd to be changed to TouchUpdate(pending end).

The actual TouchEnd event is later generated by the server once it is passed
to the next listener. UDS is never called for this event, thus the button
remains logically down.

A previous patch suggested for UDS to handle TouchUpdate events [1], however
this would release the button when the first TouchEvent is processed, not
when the last grab has been released (as is the case for sync pointer
grabs). A client may thus have the grab on the device, receive a ButtonPress
but see the button logically up in an XQueryPointer request.

This patch adds a call to UDS to TouchEmitTouchEnd(). The device state must
be updated once a TouchEnd event was sent to the last grabbing listener and
the number of grabs on the touchpoint is 0.

[1] http://patchwork.freedesktop.org/patch/13464/

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2013-05-15 19:17:39 +10:00
..
.gitignore dix and os: gitignore dix.O and os.O 2011-09-23 17:14:47 -07:00
atom.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
buildatoms XFree86 4.3.0.1 2003-11-14 16:49:22 +00:00
BuiltInAtoms R6.6 is the Xorg base-line 2003-11-14 15:54:54 +00:00
colormap.c Fix formatting of address operators 2012-12-05 18:09:48 -06:00
cursor.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
devices.c dix: devices must have valuators before touch is initialized 2013-05-15 19:17:39 +10:00
dispatch.c Move TouchListenerGone call to CloseDownClient 2013-05-10 14:32:38 +10:00
dispatch.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
dixfonts.c dix: fix redundant redeclaration warnings in dixfont 2012-11-05 13:24:59 -06:00
dixutils.c dix: delete all callbacks before reset 2013-05-08 09:27:30 +10:00
enterleave.c input: drop FP1616 macro 2012-11-19 12:12:23 +10:00
enterleave.h dix: Move DeviceFocusEvent from Xi into enterleave.c 2012-05-17 08:50:44 +10:00
eventconvert.c dix: send the current axis value in DeviceChangedEvents (#62321) 2013-05-07 09:40:42 +10:00
events.c dix: fix cursor refcounting 2013-05-15 19:16:59 +10:00
extension.c Use C99 designated initializers in dix Replies 2012-07-09 19:58:29 -07:00
ffs.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
gc.c Fix up formatting of initializers for arrays of structs 2012-08-06 15:22:53 -07:00
getevents.c dix: send the current axis value in DeviceChangedEvents (#62321) 2013-05-07 09:40:42 +10:00
globals.c os: Add -displayfd option 2012-05-01 11:36:30 +10:00
glyphcurs.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
grabs.c Move TouchListenerGone call to CloseDownClient 2013-05-10 14:32:38 +10:00
initatoms.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
inpututils.c dix: split xi2_mask_isset into a per-device function 2012-12-12 17:25:16 +10:00
main.c dix: delete all callbacks before reset 2013-05-08 09:27:30 +10:00
Makefile.am input: add a TouchClassRec to the devices 2011-12-19 09:08:36 +10:00
pixmap.c dix: allow pixmap dirty helper to be used for non-shared pixmaps 2013-04-30 10:10:31 +10:00
privates.c privates: Resize GPU screen-specific privates too 2012-07-09 16:30:24 -07:00
property.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
protocol.txt Add DRI2 requests to protocol.txt 2009-08-28 23:29:05 -04:00
ptrveloc.c dix: unify prefix for ptraccel debugging in DebugAccelF macro 2013-02-08 14:00:56 +10:00
region.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
registry.c dix: reset the registry before quitting 2013-05-07 09:41:02 +10:00
resource.c dix: add reference count of the resource to ResourceSizeRec 2012-04-18 12:49:11 +03:00
selection.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
swaprep.c Remove unneccesary casts from WriteToClient calls 2012-07-09 19:12:56 -07:00
swapreq.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
tables.c Make indentation of dix/tables.c much more consistent and readable 2012-08-06 15:22:53 -07:00
touch.c dix: call UpdateDeviceState() for emulated TouchEndEvents 2013-05-15 19:17:39 +10:00
window.c dix: only show the cursor if a window defines one (#58398) 2013-03-06 08:56:23 +10:00
Xserver-dtrace.h.in dix: add dtrace probes to input API 2012-03-22 11:33:42 +10:00
Xserver.d dix: add dtrace probes to input API 2012-03-22 11:33:42 +10:00