From 4919a089dff3ee17d5ac3fe7a3ee1c4d8c44d3f8 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 11 Mar 2025 15:19:44 +0100 Subject: [PATCH] dix: refine docs on DeliverDeviceEvents() Adding a bit more explaination on how events are passed upwards. Signed-off-by: Enrico Weigelt, metux IT consult --- dix/events.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dix/events.c b/dix/events.c index 0e2745b48..67e275681 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2867,6 +2867,9 @@ DeliverOneEvent(InternalEvent *event, DeviceIntPtr dev, enum InputLevel level, * For focused events, DeliverFocusedEvent is called first, and _may_ call * DeliverDeviceEvents. * + * If the event can't be delivered to the given window itself, trying it's + * parents, up until we find one that's taking the event. + * * @param pWin Window to deliver event to. * @param event The events to deliver, not yet in wire format. * @param grab Possible grab on a device. @@ -2886,6 +2889,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab, verify_internal_event(event); + // try the window and all its parent, whichever one first wants the event while (pWin) { if ((mask = EventIsDeliverable(dev, event->any.type, pWin))) { /* XI2 events first */ @@ -2910,7 +2914,6 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab, if (deliveries > 0) break; } - } if ((deliveries < 0) || (pWin == stopAt) ||