dix: only freeze the paired MD on a grab, not all other devices.

This commit is contained in:
Peter Hutterer 2007-11-30 11:32:59 +10:30
parent e4fe0a3cb7
commit 9eb8ea9e61

View File

@ -1520,23 +1520,24 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode)
CLIENT_BITS(grab->resource))) CLIENT_BITS(grab->resource)))
thisDev->deviceGrab.sync.other = NullGrab; thisDev->deviceGrab.sync.other = NullGrab;
} }
/* XXX: other should only work on the paired keyboard, not on all other
devices /*
XXX: Direct slave grab won't freeze the paired master device.
The correct thing to do would be to freeze all SDs attached to the
paired master device.
*/ */
for (dev = inputInfo.devices; dev; dev = dev->next) if (thisDev->isMaster)
{ {
if (dev != thisDev) dev = GetPairedDevice(thisDev);
{ if (otherMode == GrabModeSync)
if (otherMode == GrabModeSync) dev->deviceGrab.sync.other = grab;
dev->deviceGrab.sync.other = grab; else
else { /* free both if same client owns both */
{ /* free both if same client owns both */ if (dev->deviceGrab.sync.other &&
if (dev->deviceGrab.sync.other && (CLIENT_BITS(dev->deviceGrab.sync.other->resource) ==
(CLIENT_BITS(dev->deviceGrab.sync.other->resource) == CLIENT_BITS(grab->resource)))
CLIENT_BITS(grab->resource))) dev->deviceGrab.sync.other = NullGrab;
dev->deviceGrab.sync.other = NullGrab; }
}
}
} }
ComputeFreezes(); ComputeFreezes();
} }