commit a076365
Michael Forney
·
2014-07-20 02:31:34 +0000 UTC
parent 61c47e6
Add missing update_capabilities and libinput capabilities handling This was mistakenly left out of 1c1c5a8bcab4f6eae005e2ae82169ae3ee5209af.
1 files changed,
+36,
-0
+36,
-0
1@@ -218,6 +218,18 @@ static void bind_seat(struct wl_client * client, void * data, uint32_t version,
2 wl_seat_send_capabilities(resource, seat.capabilities);
3 }
4
5+static void update_capabilities(uint32_t capabilities)
6+{
7+ if (~seat.capabilities & capabilities)
8+ {
9+ struct wl_resource * resource;
10+
11+ seat.capabilities |= capabilities;
12+ wl_list_for_each(resource, &seat.resources, link)
13+ wl_seat_send_capabilities(resource, seat.capabilities);
14+ }
15+}
16+
17 #ifdef ENABLE_LIBINPUT
18 static int open_restricted(const char * path, int flags, void * user_data)
19 {
20@@ -234,6 +246,22 @@ const struct libinput_interface libinput_interface = {
21 .close_restricted = &close_restricted,
22 };
23
24+static uint32_t device_capabilities(struct libinput_device * device)
25+{
26+ uint32_t capabilities = 0;
27+
28+ if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_KEYBOARD))
29+ capabilities |= WL_SEAT_CAPABILITY_KEYBOARD;
30+ if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_POINTER))
31+ capabilities |= WL_SEAT_CAPABILITY_POINTER;
32+ /* TODO: Add touch device support
33+ if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_TOUCH))
34+ capabilities |= WL_SEAT_CAPABILITY_TOUCH;
35+ */
36+
37+ return capabilities;
38+}
39+
40 static int handle_libinput_data(int fd, uint32_t mask, void * data)
41 {
42 struct libinput_event * generic_event;
43@@ -248,6 +276,14 @@ static int handle_libinput_data(int fd, uint32_t mask, void * data)
44 {
45 switch (libinput_event_get_type(generic_event))
46 {
47+ case LIBINPUT_EVENT_DEVICE_ADDED:
48+ {
49+ struct libinput_device * device;
50+
51+ device = libinput_event_get_device(generic_event);
52+ update_capabilities(device_capabilities(device));
53+ break;
54+ }
55 case LIBINPUT_EVENT_KEYBOARD_KEY:
56 {
57 struct libinput_event_keyboard * event;