dix: move delivery stop condition out of event mask

Previously, this was only called if there was a mask match, so even if we
had a no-propagate flag set or a stopAt window specified, if no mask
triggered on the window we would recurse up to the root window and
eventually deliver.
Move this, so that the stopAt and do-not-propagate mask is honoured.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
Peter Hutterer 2011-12-08 12:00:34 +10:00
parent 1d01e861b6
commit 47734b2ba2

View File

@ -2693,12 +2693,13 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab,
break;
}
if ((deliveries < 0) || (pWin == stopAt) ||
(mask & EVENT_DONT_PROPAGATE_MASK))
{
deliveries = 0;
break;
}
}
if ((deliveries < 0) || (pWin == stopAt) ||
(mask & EVENT_DONT_PROPAGATE_MASK))
{
deliveries = 0;
break;
}
child = pWin->drawable.id;