ei: fix ei_seat_unbind_capabilities

Simplify the code a little but more importantly: if we get down to zero
capabilities close the devices - just like we do in
ei_seat_unbind_capability.
This commit is contained in:
Peter Hutterer 2023-04-14 10:50:41 +10:00
parent 1a4764d99b
commit cf74cfeb1e

View file

@ -332,7 +332,7 @@ ei_seat_unbind_capabilities(struct ei_seat *seat, ...)
return;
}
uint32_t mask = 0;
uint32_t old_mask = seat->capabilities_bound;
enum ei_device_capability cap;
va_list args;
@ -341,14 +341,19 @@ ei_seat_unbind_capabilities(struct ei_seat *seat, ...)
if (!is_known_cap(cap))
continue;
mask_add(mask, cap);
mask_remove(seat->capabilities_bound, cap);
}
mask = seat->capabilities & ~mask;
if (seat->capabilities_bound == mask)
if (seat->capabilities_bound == old_mask)
return;
seat->capabilities_bound = mask;
if (seat->capabilities_bound == 0) {
struct ei_device *device;
list_for_each(device, &seat->devices, link) {
if (ei_device_has_capability(device, cap))
ei_device_close(device);
}
}
ei_seat_send_bind(seat, seat->capabilities_bound);
}