barriers: Send a BarrierLeave event when we leave the hitbox
Additionally, add flags when the pointer is released. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jasper St. Pierre <jstpierre@mecheye.net>
This commit is contained in:
parent
dac9e13a6c
commit
7fabecd8e3
|
@ -417,6 +417,7 @@ input_constrain_cursor(DeviceIntPtr dev, ScreenPtr screen,
|
||||||
}
|
}
|
||||||
|
|
||||||
xorg_list_for_each_entry(c, &cs->barriers, entry) {
|
xorg_list_for_each_entry(c, &cs->barriers, entry) {
|
||||||
|
int flags = 0;
|
||||||
c->seen = FALSE;
|
c->seen = FALSE;
|
||||||
if (!c->hit)
|
if (!c->hit)
|
||||||
continue;
|
continue;
|
||||||
|
@ -425,6 +426,22 @@ input_constrain_cursor(DeviceIntPtr dev, ScreenPtr screen,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
c->hit = FALSE;
|
c->hit = FALSE;
|
||||||
|
|
||||||
|
ev.type = ET_BarrierLeave;
|
||||||
|
|
||||||
|
if (c->barrier_event_id == c->release_event_id)
|
||||||
|
flags |= XIBarrierPointerReleased;
|
||||||
|
|
||||||
|
ev.flags = flags;
|
||||||
|
ev.event_id = c->barrier_event_id;
|
||||||
|
ev.barrierid = c->id;
|
||||||
|
|
||||||
|
ev.dt = ms - c->last_timestamp;
|
||||||
|
ev.window = c->window->drawable.id;
|
||||||
|
c->last_timestamp = ms;
|
||||||
|
|
||||||
|
mieqEnqueue(dev, (InternalEvent *) &ev);
|
||||||
|
|
||||||
/* If we've left the hit box, this is the
|
/* If we've left the hit box, this is the
|
||||||
* start of a new event ID. */
|
* start of a new event ID. */
|
||||||
c->barrier_event_id++;
|
c->barrier_event_id++;
|
||||||
|
|
Loading…
Reference in New Issue