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:
Jamey Sharp 2010-08-04 11:44:05 -07:00 committed by Peter Hutterer
parent 1c1811ecaf
commit 32de0c1907
2 changed files with 20 additions and 28 deletions

View File

@ -1276,7 +1276,6 @@ static void
ComputeFreezes(void) ComputeFreezes(void)
{ {
DeviceIntPtr replayDev = syncEvents.replayDev; DeviceIntPtr replayDev = syncEvents.replayDev;
int i;
WindowPtr w; WindowPtr w;
GrabPtr grab; GrabPtr grab;
DeviceIntPtr dev; DeviceIntPtr dev;
@ -1294,29 +1293,15 @@ ComputeFreezes(void)
syncEvents.replayDev = (DeviceIntPtr)NULL; syncEvents.replayDev = (DeviceIntPtr)NULL;
w = XYToWindow(replayDev, event->root_x, event->root_y); w = XYToWindow(replayDev, event->root_x, event->root_y);
for (i = 0; i < replayDev->spriteInfo->sprite->spriteTraceGood; i++) if (!CheckDeviceGrabs(replayDev, event, syncEvents.replayWin))
{ {
if (syncEvents.replayWin == if (replayDev->focus && !IsPointerEvent((InternalEvent*)event))
replayDev->spriteInfo->sprite->spriteTrace[i]) DeliverFocusedEvent(replayDev, (InternalEvent*)event, w);
{ else
if (!CheckDeviceGrabs(replayDev, event, i+1)) { DeliverDeviceEvents(w, (InternalEvent*)event, NullGrab,
if (replayDev->focus && !IsPointerEvent((InternalEvent*)event)) NullWindow, replayDev);
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);
} }
playmore:
for (dev = inputInfo.devices; dev; dev = dev->next) for (dev = inputInfo.devices; dev; dev = dev->next)
{ {
if (!dev->deviceGrab.sync.frozen) if (!dev->deviceGrab.sync.frozen)
@ -3611,7 +3596,7 @@ CheckPassiveGrabsOnWindow(
*/ */
Bool Bool
CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst) CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, WindowPtr ancestor)
{ {
int i; int i;
WindowPtr pWin = NULL; WindowPtr pWin = NULL;
@ -3629,7 +3614,15 @@ CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst)
if (device->deviceGrab.grab) if (device->deviceGrab.grab)
return FALSE; 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) if (focus)
{ {
@ -3642,8 +3635,7 @@ CheckDeviceGrabs(DeviceIntPtr device, DeviceEvent *event, int checkFirst)
if ((focus->win == NoneWin) || if ((focus->win == NoneWin) ||
(i >= device->spriteInfo->sprite->spriteTraceGood) || (i >= device->spriteInfo->sprite->spriteTraceGood) ||
((i > checkFirst) && (pWin && pWin != device->spriteInfo->sprite->spriteTrace[i-1]))
(pWin != device->spriteInfo->sprite->spriteTrace[i-1])))
return FALSE; return FALSE;
} }

View File

@ -401,7 +401,7 @@ extern _X_EXPORT void WindowHasNewCursor(
extern Bool CheckDeviceGrabs( extern Bool CheckDeviceGrabs(
DeviceIntPtr /* device */, DeviceIntPtr /* device */,
DeviceEvent* /* event */, DeviceEvent* /* event */,
int /* checkFirst */); WindowPtr /* ancestor */);
extern void DeliverFocusedEvent( extern void DeliverFocusedEvent(
DeviceIntPtr /* keybd */, DeviceIntPtr /* keybd */,