input: Check device counts in bind_seat()

We shouldn't be using seat->pointer|keyboard|touch here, we should be
testing *_device_count to see if a device is currently present.

Testing the pointers directly will result in incorrectly advertising
capabilities after all devices of a type have been removed.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
dev
Derek Foreman 10 years ago committed by Bryce Harrington
parent d956379058
commit 30ce607682
  1. 6
      src/input.c

@ -1901,11 +1901,11 @@ bind_seat(struct wl_client *client, void *data, uint32_t version, uint32_t id)
wl_resource_set_implementation(resource, &seat_interface, data, wl_resource_set_implementation(resource, &seat_interface, data,
unbind_resource); unbind_resource);
if (seat->pointer) if (seat->pointer_device_count)
caps |= WL_SEAT_CAPABILITY_POINTER; caps |= WL_SEAT_CAPABILITY_POINTER;
if (seat->keyboard) if (seat->keyboard_device_count)
caps |= WL_SEAT_CAPABILITY_KEYBOARD; caps |= WL_SEAT_CAPABILITY_KEYBOARD;
if (seat->touch) if (seat->touch_device_count)
caps |= WL_SEAT_CAPABILITY_TOUCH; caps |= WL_SEAT_CAPABILITY_TOUCH;
wl_seat_send_capabilities(resource, caps); wl_seat_send_capabilities(resource, caps);

Loading…
Cancel
Save