swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit a07636521fd6a486acc7c9c80b85c906a2a7f041
parent 61c47e6cecb162107a6b9c13e100ffce1e78c53d
Author: Michael Forney <mforney@mforney.org>
Date:   Sat, 19 Jul 2014 19:31:34 -0700

Add missing update_capabilities and libinput capabilities handling

This was mistakenly left out of 1c1c5a8bcab4f6eae005e2ae82169ae3ee5209af.

Diffstat:
Mlibswc/seat.c | 36++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+), 0 deletions(-)

diff --git a/libswc/seat.c b/libswc/seat.c @@ -218,6 +218,18 @@ static void bind_seat(struct wl_client * client, void * data, uint32_t version, wl_seat_send_capabilities(resource, seat.capabilities); } +static void update_capabilities(uint32_t capabilities) +{ + if (~seat.capabilities & capabilities) + { + struct wl_resource * resource; + + seat.capabilities |= capabilities; + wl_list_for_each(resource, &seat.resources, link) + wl_seat_send_capabilities(resource, seat.capabilities); + } +} + #ifdef ENABLE_LIBINPUT static int open_restricted(const char * path, int flags, void * user_data) { @@ -234,6 +246,22 @@ const struct libinput_interface libinput_interface = { .close_restricted = &close_restricted, }; +static uint32_t device_capabilities(struct libinput_device * device) +{ + uint32_t capabilities = 0; + + if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_KEYBOARD)) + capabilities |= WL_SEAT_CAPABILITY_KEYBOARD; + if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_POINTER)) + capabilities |= WL_SEAT_CAPABILITY_POINTER; + /* TODO: Add touch device support + if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_TOUCH)) + capabilities |= WL_SEAT_CAPABILITY_TOUCH; + */ + + return capabilities; +} + static int handle_libinput_data(int fd, uint32_t mask, void * data) { struct libinput_event * generic_event; @@ -248,6 +276,14 @@ static int handle_libinput_data(int fd, uint32_t mask, void * data) { switch (libinput_event_get_type(generic_event)) { + case LIBINPUT_EVENT_DEVICE_ADDED: + { + struct libinput_device * device; + + device = libinput_event_get_device(generic_event); + update_capabilities(device_capabilities(device)); + break; + } case LIBINPUT_EVENT_KEYBOARD_KEY: { struct libinput_event_keyboard * event;