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;