Xi: if a MD is removed, send a barrier leave event (if applicable)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jasper St. Pierre <jstpierre@mecheye.net>
This commit is contained in:
parent
e2423b627e
commit
2eefa5d6e8
|
@ -714,12 +714,41 @@ static void remove_master_func(pointer res, XID id, pointer devid)
|
||||||
struct PointerBarrierDevice *pbd;
|
struct PointerBarrierDevice *pbd;
|
||||||
struct PointerBarrierClient *barrier;
|
struct PointerBarrierClient *barrier;
|
||||||
struct PointerBarrier *b;
|
struct PointerBarrier *b;
|
||||||
|
DeviceIntPtr dev;
|
||||||
int *deviceid = devid;
|
int *deviceid = devid;
|
||||||
|
int rc;
|
||||||
|
Time ms = GetTimeInMillis();
|
||||||
|
|
||||||
|
rc = dixLookupDevice(&dev, *deviceid, serverClient, DixSendAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
return;
|
||||||
|
|
||||||
b = res;
|
b = res;
|
||||||
barrier = container_of(b, struct PointerBarrierClient, barrier);
|
barrier = container_of(b, struct PointerBarrierClient, barrier);
|
||||||
|
|
||||||
pbd = GetBarrierDevice(barrier, *deviceid);
|
pbd = GetBarrierDevice(barrier, *deviceid);
|
||||||
|
|
||||||
|
if (pbd->hit) {
|
||||||
|
BarrierEvent ev = {
|
||||||
|
.header = ET_Internal,
|
||||||
|
.type =ET_BarrierLeave,
|
||||||
|
.length = sizeof (BarrierEvent),
|
||||||
|
.time = ms,
|
||||||
|
.deviceid = *deviceid,
|
||||||
|
.sourceid = 0,
|
||||||
|
.dx = 0,
|
||||||
|
.dy = 0,
|
||||||
|
.root = barrier->screen->root->drawable.id,
|
||||||
|
.window = barrier->window,
|
||||||
|
.dt = ms - pbd->last_timestamp,
|
||||||
|
.flags = XIBarrierPointerReleased,
|
||||||
|
.event_id = pbd->barrier_event_id,
|
||||||
|
.barrierid = barrier->id,
|
||||||
|
};
|
||||||
|
|
||||||
|
mieqEnqueue(dev, (InternalEvent *) &ev);
|
||||||
|
}
|
||||||
|
|
||||||
xorg_list_del(&pbd->entry);
|
xorg_list_del(&pbd->entry);
|
||||||
free(pbd);
|
free(pbd);
|
||||||
}
|
}
|
||||||
|
@ -731,7 +760,6 @@ void XIBarrierNewMasterDevice(ClientPtr client, int deviceid)
|
||||||
|
|
||||||
void XIBarrierRemoveMasterDevice(ClientPtr client, int deviceid)
|
void XIBarrierRemoveMasterDevice(ClientPtr client, int deviceid)
|
||||||
{
|
{
|
||||||
/* FIXME: send LeaveNotify */
|
|
||||||
FindClientResourcesByType(client, PointerBarrierType, remove_master_func, &deviceid);
|
FindClientResourcesByType(client, PointerBarrierType, remove_master_func, &deviceid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue