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:
parent
5ea2fb389f
commit
ac0850e86f
52
dix/events.c
52
dix/events.c
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue