diff options
author | Keith Packard <keithp@keithp.com> | 2012-10-26 17:11:58 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-10-26 17:11:58 -0700 |
commit | abc2ef590c7cb33ebe21726f83b7347406975f95 (patch) | |
tree | 47a4d287ecf4919dd365f48c7beb7f719b79619e | |
parent | 0e85e5e62819c9e516d6e19836f9f5d7a5d53e87 (diff) | |
parent | c5396ec05a5c6cab6608ba677f703c5227b1de13 (diff) |
Merge remote-tracking branch 'whot/for-keith'
-rwxr-xr-x | autogen.sh | 4 | ||||
-rw-r--r-- | dix/devices.c | 1 | ||||
-rw-r--r-- | dix/grabs.c | 2 | ||||
-rw-r--r-- | dix/touch.c | 28 | ||||
-rw-r--r-- | hw/xfree86/common/xf86str.h | 2 | ||||
-rw-r--r-- | include/input.h | 1 |
6 files changed, 35 insertions, 3 deletions
diff --git a/autogen.sh b/autogen.sh index 8b6f58f69..dd0731ad9 100755 --- a/autogen.sh +++ b/autogen.sh @@ -9,4 +9,6 @@ cd $srcdir autoreconf --force -v --install || exit 1 cd $ORIGDIR || exit $? -$srcdir/configure "$@" +if test -z "$NOCONFIGURE"; then + exec $srcdir/configure "$@" +fi diff --git a/dix/devices.c b/dix/devices.c index 66d440683..fd4916a3a 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -443,6 +443,7 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent) if (*prev != dev) return FALSE; + TouchEndPhysicallyActiveTouches(dev); ReleaseButtonsAndKeys(dev); SyncRemoveDeviceIdleTime(dev->idle_counter); dev->idle_counter = NULL; diff --git a/dix/grabs.c b/dix/grabs.c index 55bf64f2c..fe7967415 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -179,7 +179,7 @@ UngrabAllDevices(Bool kill_client) continue; PrintDeviceGrabInfo(dev); client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)]; - if (!client || client->clientGone) + if (!kill_client || !client || client->clientGone) dev->deviceGrab.DeactivateGrab(dev); if (kill_client) CloseDownClient(client); diff --git a/dix/touch.c b/dix/touch.c index 497ad7dac..e64a6262c 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -1029,3 +1029,31 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, return TouchListenerAcceptReject(dev, ti, i, mode); } + +/** + * End physically active touches for a device. + */ +void +TouchEndPhysicallyActiveTouches(DeviceIntPtr dev) +{ + InternalEvent *eventlist = InitEventList(GetMaximumEventsNum()); + int i; + + OsBlockSignals(); + mieqProcessInputEvents(); + for (i = 0; i < dev->last.num_touches; i++) { + DDXTouchPointInfoPtr ddxti = dev->last.touches + i; + + if (ddxti->active) { + int j; + int nevents = GetTouchEvents(eventlist, dev, ddxti->ddx_id, + XI_TouchEnd, 0, NULL); + + for (j = 0; j < nevents; j++) + mieqProcessDeviceEvent(dev, eventlist + j, NULL); + } + } + OsReleaseSignals(); + + FreeEventList(eventlist, GetMaximumEventsNum()); +} diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h index 059026243..4c2d147a2 100644 --- a/hw/xfree86/common/xf86str.h +++ b/hw/xfree86/common/xf86str.h @@ -347,7 +347,7 @@ typedef struct _DriverRec { */ /* Tolerate prior #include <linux/input.h> */ -#if defined(linux) && defined(_INPUT_H) +#if defined(linux) #undef BUS_NONE #undef BUS_PCI #undef BUS_SBUS diff --git a/include/input.h b/include/input.h index 5747f3cd2..f8459b8c8 100644 --- a/include/input.h +++ b/include/input.h @@ -579,6 +579,7 @@ 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); +extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev); /* misc event helpers */ extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients); |