dix: check for core passive grabs on inferiors when replaying events.

This commit is contained in:
Peter Hutterer 2007-10-24 10:09:18 +09:30
parent 042e16458b
commit 02508614b9

View File

@ -1400,18 +1400,24 @@ ComputeFreezes(void)
* deliver it too. * deliver it too.
* However, we might get here with a core event, in which * However, we might get here with a core event, in which
* case we mustn't emulate a core event. * case we mustn't emulate a core event.
* XXX: I think this may break things. If a client has a
* device grab, and another client a core grab on an
* inferior window, we never get the core grab. (whot)
*/ */
sendCore = (replayDev->coreEvents && sendCore = (replayDev->coreEvents &&
(xE->u.u.type & EXTENSION_EVENT_BASE && (xE->u.u.type & EXTENSION_EVENT_BASE &&
XItoCoreType(xE->u.u.type))); XItoCoreType(xE->u.u.type)));
if (sendCore) if (sendCore)
{ {
core = *xE; core = *xE;
core.u.u.type = XItoCoreType(xE->u.u.type); core.u.u.type = XItoCoreType(xE->u.u.type);
/* * XXX: Not sure if this is correct: we need to
* check inferior windows for core passive grabs.
*/
if (CheckDeviceGrabs(replayDev, &core, i+1, 1))
{
syncEvents.playingEvents = FALSE;
return;
}
} }
if (replayDev->focus) if (replayDev->focus)
{ {