Merge remote-tracking branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2012-10-26 17:11:58 -07:00
commit abc2ef590c
6 changed files with 35 additions and 3 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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());
}

View File

@ -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

View File

@ -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);