dix: split DeliverEventToWindowMask up a bit more.

Move out the actual event delivery, it needs to be used from elsewhere.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
Peter Hutterer 2011-05-27 12:14:32 +10:00
parent 5ea2fb389f
commit ac0850e86f

View File

@ -2076,35 +2076,27 @@ out:
} }
/** /**
* Deliver events to clients registered on the window. * Try delivery on each client in inputclients, provided the event mask
* * accepts it and there is no interfering core grab..
* @param client_return On successful delivery, set to the recipient.
* @param mask_return On successful delivery, set to the recipient's event
* mask for this event.
*/ */
static enum EventDeliveryState static enum EventDeliveryState
DeliverEventToWindowMask(DeviceIntPtr dev, WindowPtr win, xEvent *events, DeliverEventToInputClients(DeviceIntPtr dev, InputClients *inputclients,
int count, Mask filter, GrabPtr grab, WindowPtr win, xEvent *events,
ClientPtr *client_return, Mask *mask_return) int count, Mask filter, GrabPtr grab,
ClientPtr *client_return, Mask *mask_return)
{ {
int attempt; int attempt;
enum EventDeliveryState rc = EVENT_SKIP; enum EventDeliveryState rc = EVENT_NOT_DELIVERED;
InputClients *other;
if (!GetClientsForDelivery(dev, win, events, filter, &other)) for (; inputclients; inputclients = inputclients->next)
goto out;
rc = EVENT_NOT_DELIVERED;
for (; other; other = other->next)
{ {
Mask mask; Mask mask;
ClientPtr client = rClient(other); ClientPtr client = rClient(inputclients);
if (IsInterferingGrab(client, dev, events)) if (IsInterferingGrab(client, dev, events))
continue; continue;
mask = GetEventMask(dev, events, other); mask = GetEventMask(dev, events, inputclients);
if (XaceHook(XACE_RECEIVE_ACCESS, client, win, if (XaceHook(XACE_RECEIVE_ACCESS, client, win,
events, count)) events, count))
@ -2125,11 +2117,33 @@ DeliverEventToWindowMask(DeviceIntPtr dev, WindowPtr win, xEvent *events,
} }
} }
out:
return rc; return rc;
} }
/**
* Deliver events to clients registered on the window.
*
* @param client_return On successful delivery, set to the recipient.
* @param mask_return On successful delivery, set to the recipient's event
* mask for this event.
*/
static enum EventDeliveryState
DeliverEventToWindowMask(DeviceIntPtr dev, WindowPtr win, xEvent *events,
int count, Mask filter, GrabPtr grab,
ClientPtr *client_return, Mask *mask_return)
{
InputClients *clients;
if (!GetClientsForDelivery(dev, win, events, filter, &clients))
return EVENT_SKIP;
return DeliverEventToInputClients(dev, clients, win, events, count, filter,
grab, client_return, mask_return);
}
/** /**
* Deliver events to a window. At this point, we do not yet know if the event * Deliver events to a window. At this point, we do not yet know if the event
* actually needs to be delivered. May activate a grab if the event is a * actually needs to be delivered. May activate a grab if the event is a