Move replay-window check from ComputeFreezes to CheckDeviceGrabs.
This just simplifies ComputeFreezes, eliminating some duplicated code and a goto. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
1c1811ecaf
commit
32de0c1907
46
dix/events.c
46
dix/events.c
|
@ -1276,7 +1276,6 @@ static void
|
|||
ComputeFreezes(void)
|
||||
{
|
||||
DeviceIntPtr replayDev = syncEvents.replayDev;
|
||||
int i;
|
||||
WindowPtr w;
|
||||
GrabPtr grab;
|
||||
DeviceIntPtr dev;
|
||||
|
@ -1294,29 +1293,15 @@ ComputeFreezes(void)
|
|||
syncEvents.replayDev = (DeviceIntPtr)NULL;
|
||||
|
||||
w = XYToWindow(replayDev, event->root_x, event->root_y);
|
||||
for (i = 0; i < replayDev->spriteInfo->sprite->spriteTraceGood; i++)
|
||||
{
|
||||
if (syncEvents.replayWin ==
|
||||
replayDev->spriteInfo->sprite->spriteTrace[i])
|
||||
{
|
||||
if (!CheckDeviceGrabs(replayDev, event, i+1)) {
|
||||
if (replayDev->focus && !IsPointerEvent((InternalEvent*)event))
|
||||
DeliverFocusedEvent(replayDev, (InternalEvent*)event, w);
|
||||
else
|
||||
DeliverDeviceEvents(w, (InternalEvent*)event, NullGrab,
|
||||
NullWindow, replayDev);
|
||||
}
|
||||
goto playmore;
|
||||
}
|
||||
}
|
||||
/* must not still be in the same stack */
|
||||
if (replayDev->focus && !IsPointerEvent((InternalEvent*)event))
|
||||
DeliverFocusedEvent(replayDev, (InternalEvent*)event, w);
|
||||
else
|
||||
DeliverDeviceEvents(w, (InternalEvent*)event, NullGrab,
|
||||
NullWindow, replayDev);
|
||||
if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin))
|
||||
{
|
||||
if (replayDev->focus && !IsPointerEvent((InternalEvent*)event))
|
||||
DeliverFocusedEvent(replayDev, (InternalEvent*)event, w);
|
||||
else
|
||||
DeliverDeviceEvents(w, (InternalEvent*)event, NullGrab,
|
||||
NullWindow, replayDev);
|
||||
}
|
||||
}
|
||||
playmore:
|
||||
for (dev = inputInfo.devices; dev; dev = dev->next)
|
||||
{
|
||||
if (!dev->deviceGrab.sync.frozen)
|
||||
|
@ -3611,7 +3596,7 @@ CheckPassiveGrabsOnWindow(
|
|||
*/
|
||||
|
||||
Bool
|
||||
CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst)
|
||||
CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, WindowPtr ancestor)
|
||||
{
|
||||
int i;
|
||||
WindowPtr pWin = NULL;
|
||||
|
@ -3629,7 +3614,15 @@ CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst)
|
|||
if (device->deviceGrab.grab)
|
||||
return FALSE;
|
||||
|
||||
i = checkFirst;
|
||||
i = 0;
|
||||
if (ancestor)
|
||||
{
|
||||
while (i < device->spriteInfo->sprite->spriteTraceGood)
|
||||
if (device->spriteInfo->sprite->spriteTrace[i++] == ancestor)
|
||||
break;
|
||||
if (i == device->spriteInfo->sprite->spriteTraceGood)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (focus)
|
||||
{
|
||||
|
@ -3642,8 +3635,7 @@ CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst)
|
|||
|
||||
if ((focus->win == NoneWin) ||
|
||||
(i >= device->spriteInfo->sprite->spriteTraceGood) ||
|
||||
((i > checkFirst) &&
|
||||
(pWin != device->spriteInfo->sprite->spriteTrace[i-1])))
|
||||
(pWin && pWin != device->spriteInfo->sprite->spriteTrace[i-1]))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ extern _X_EXPORT void WindowHasNewCursor(
|
|||
extern Bool CheckDeviceGrabs(
|
||||
DeviceIntPtr /* device */,
|
||||
DeviceEvent* /* event */,
|
||||
int /* checkFirst */);
|
||||
WindowPtr /* ancestor */);
|
||||
|
||||
extern void DeliverFocusedEvent(
|
||||
DeviceIntPtr /* keybd */,
|
||||
|
|
Loading…
Reference in New Issue