From cf74cfeb1ec8cd8cf53224d0b44490f61106171a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 14 Apr 2023 10:50:41 +1000 Subject: [PATCH] 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. --- src/libei-seat.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/libei-seat.c b/src/libei-seat.c index 004c839..37e130a 100644 --- a/src/libei-seat.c +++ b/src/libei-seat.c @@ -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); }