diff options
author | marha <marha@users.sourceforge.net> | 2012-10-30 10:18:15 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-10-30 10:18:15 +0100 |
commit | 33d29586bf3a280e821e0bf62694492dba459dab (patch) | |
tree | e029e900674f4f8901cae65c95acd3e15ce3948c /xorg-server/dix | |
parent | af2d8fb974d476eadcd3cde3baebd038f5750600 (diff) | |
parent | 7b3f315a5d8b90dcb0db5512ed91fa700027cb7a (diff) | |
download | vcxsrv-33d29586bf3a280e821e0bf62694492dba459dab.tar.gz vcxsrv-33d29586bf3a280e821e0bf62694492dba459dab.tar.bz2 vcxsrv-33d29586bf3a280e821e0bf62694492dba459dab.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
fontconfig xserver mesa git update 30 oct 2012
Conflicts:
xorg-server/dix/grabs.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winprefslex.l
xorg-server/hw/xwin/winprefsyacc.y
xorg-server/hw/xwin/winregistry.c
Diffstat (limited to 'xorg-server/dix')
-rw-r--r-- | xorg-server/dix/devices.c | 1 | ||||
-rw-r--r-- | xorg-server/dix/grabs.c | 3 | ||||
-rw-r--r-- | xorg-server/dix/touch.c | 28 |
3 files changed, 31 insertions, 1 deletions
diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c index 8f208933b..f30407a4e 100644 --- a/xorg-server/dix/devices.c +++ b/xorg-server/dix/devices.c @@ -448,6 +448,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/xorg-server/dix/grabs.c b/xorg-server/dix/grabs.c index 83e18e263..fe7967415 100644 --- a/xorg-server/dix/grabs.c +++ b/xorg-server/dix/grabs.c @@ -179,7 +179,8 @@ UngrabAllDevices(Bool kill_client) continue; PrintDeviceGrabInfo(dev); client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)]; - dev->deviceGrab.DeactivateGrab(dev); + if (!kill_client || !client || client->clientGone) + dev->deviceGrab.DeactivateGrab(dev); if (kill_client) CloseDownClient(client); } diff --git a/xorg-server/dix/touch.c b/xorg-server/dix/touch.c index 497ad7dac..e64a6262c 100644 --- a/xorg-server/dix/touch.c +++ b/xorg-server/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()); +} |