input: Check device counts in bind_seat()
authorDerek Foreman <derekf@osg.samsung.com>
Wed, 15 Jul 2015 18:00:44 +0000 (13:00 -0500)
committerBryce Harrington <bryce@osg.samsung.com>
Fri, 31 Jul 2015 22:15:46 +0000 (15:15 -0700)
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>
src/input.c

index 1d7e705..bbcaec5 100644 (file)
@@ -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,
                                       unbind_resource);
 
-       if (seat->pointer)
+       if (seat->pointer_device_count)
                caps |= WL_SEAT_CAPABILITY_POINTER;
-       if (seat->keyboard)
+       if (seat->keyboard_device_count)
                caps |= WL_SEAT_CAPABILITY_KEYBOARD;
-       if (seat->touch)
+       if (seat->touch_device_count)
                caps |= WL_SEAT_CAPABILITY_TOUCH;
 
        wl_seat_send_capabilities(resource, caps);