Xi: deliver barrier events as grabbed events where necessary
If the grab_window is the barrier window and the client owns the grab, deliver as normal grabbed event (respecting owner_events). Otherwise, deliver as usual. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jasper St. Pierre <jstpierre@mecheye.net>
This commit is contained in:
parent
3b16140170
commit
353aa51592
|
@ -1647,6 +1647,7 @@ ProcessBarrierEvent(InternalEvent *e, DeviceIntPtr dev)
|
|||
BarrierEvent *be = &e->barrier_event;
|
||||
xEvent *ev;
|
||||
int rc;
|
||||
GrabPtr grab = dev->deviceGrab.grab;
|
||||
|
||||
if (!IsMaster(dev))
|
||||
return;
|
||||
|
@ -1660,10 +1661,21 @@ ProcessBarrierEvent(InternalEvent *e, DeviceIntPtr dev)
|
|||
return;
|
||||
}
|
||||
|
||||
filter = GetEventFilter(dev, ev);
|
||||
/* A client has a grab, deliver to this client if the grab_window is the
|
||||
barrier window.
|
||||
|
||||
DeliverEventsToWindow(dev, pWin, ev, 1,
|
||||
filter, NullGrab);
|
||||
Otherwise, deliver normally to the client.
|
||||
*/
|
||||
if (grab &&
|
||||
CLIENT_ID(be->barrierid) == CLIENT_ID(grab->resource) &&
|
||||
grab->window->drawable.id == be->window) {
|
||||
DeliverGrabbedEvent(e, dev, FALSE);
|
||||
} else {
|
||||
filter = GetEventFilter(dev, ev);
|
||||
|
||||
DeliverEventsToWindow(dev, pWin, ev, 1,
|
||||
filter, NullGrab);
|
||||
}
|
||||
free(ev);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue