commit 2814349

Michael Forney  ·  2013-09-14 03:37:08 +0000 UTC
parent 06a2686
evdev_device: Don't use libudev
3 files changed,  +12, -21
+7, -17
 1@@ -154,19 +154,10 @@ static int handle_data(int fd, uint32_t mask, void * data)
 2 }
 3 
 4 bool swc_evdev_device_initialize(struct swc_evdev_device * device,
 5-                                 struct udev_device * udev_device)
 6+                                 const char * path)
 7 {
 8-    const char * path, * model, * vendor;
 9     uint32_t index;
10 
11-    path = udev_device_get_devnode(udev_device);
12-    model = udev_device_get_property_value(udev_device, "ID_MODEL")
13-        ?: "unknown";
14-    vendor = udev_device_get_property_value(udev_device, "ID_VENDOR")
15-        ?: "unknown";
16-
17-    device->model = strdup(model);
18-    device->vendor = strdup(vendor);
19     device->fd = open(path, O_RDWR | O_NONBLOCK | O_CLOEXEC);
20     memset(&device->motion, 0, sizeof device->motion);
21 
22@@ -184,19 +175,20 @@ bool swc_evdev_device_initialize(struct swc_evdev_device * device,
23         goto error_fd;
24     }
25 
26-    printf("adding device %s %s\n", device->vendor, device->model);
27+    printf("Adding device %s\n", libevdev_get_name(device->dev));
28 
29     device->capabilities = 0;
30     /* XXX: touch devices */
31 
32-    if (udev_device_get_property_value(udev_device, "ID_INPUT_KEYBOARD"))
33+    if (libevdev_has_event_code(device->dev, EV_KEY, KEY_ENTER))
34     {
35         device->capabilities |= WL_SEAT_CAPABILITY_KEYBOARD;
36         printf("\tthis device is a keyboard\n");
37     }
38 
39-    if (udev_device_get_property_value(udev_device, "ID_INPUT_MOUSE")
40-        || udev_device_get_property_value(udev_device, "ID_INPUT_TOUCHPAD"))
41+    if (libevdev_has_event_code(device->dev, EV_REL, REL_X)
42+        && libevdev_has_event_code(device->dev, EV_REL, REL_Y)
43+        && libevdev_has_event_code(device->dev, EV_KEY, BTN_MOUSE))
44     {
45         device->capabilities |= WL_SEAT_CAPABILITY_POINTER;
46         printf("\tthis device is a pointer\n");
47@@ -214,15 +206,13 @@ void swc_evdev_device_finish(struct swc_evdev_device * device)
48 {
49     wl_event_source_remove(device->source);
50     libevdev_free(device->dev);
51-    free(device->model);
52-    free(device->vendor);
53     close(device->fd);
54 }
55 
56 void swc_evdev_device_add_event_sources(struct swc_evdev_device * device,
57                                         struct wl_event_loop * event_loop)
58 {
59-    printf("adding event source for %s %s\n", device->vendor, device->model);
60+    printf("Adding event source for %s\n", libevdev_get_name(device->dev));
61     device->source
62         = wl_event_loop_add_fd(event_loop, device->fd, WL_EVENT_READABLE,
63                                handle_data, device);
+1, -3
 1@@ -2,7 +2,6 @@
 2 #define SWC_EVDEV_DEVICE_H 1
 3 
 4 #include <stdbool.h>
 5-#include <libudev.h>
 6 #include <linux/input.h>
 7 #include <wayland-server.h>
 8 
 9@@ -51,7 +50,6 @@ struct swc_evdev_device
10 {
11     int fd;
12     struct libevdev * dev;
13-    char * model, * vendor;
14 
15     struct
16     {
17@@ -81,7 +79,7 @@ struct swc_evdev_device
18 };
19 
20 bool swc_evdev_device_initialize(struct swc_evdev_device * device,
21-                                 struct udev_device * udev_device);
22+                                 const char * path);
23 
24 void swc_evdev_device_finish(struct swc_evdev_device * device);
25 
+4, -1
 1@@ -179,6 +179,7 @@ static void add_device(struct swc_seat * seat, struct udev_device * udev_device)
 2 {
 3     const char * device_seat;
 4     const char * device_path;
 5+    struct swc_evdev_device * device;
 6     struct evdev_device_entry * entry;
 7 
 8     device_seat = udev_device_get_property_value(udev_device, "ID_SEAT");
 9@@ -190,6 +191,8 @@ static void add_device(struct swc_seat * seat, struct udev_device * udev_device)
10     if (strcmp(device_seat, seat->name) != 0)
11         return;
12 
13+    device_path = udev_device_get_devnode(udev_device);
14+
15     entry = malloc(sizeof *entry);
16 
17     if (!entry)
18@@ -201,7 +204,7 @@ static void add_device(struct swc_seat * seat, struct udev_device * udev_device)
19     entry->seat = seat;
20     entry->event_listener.notify = &handle_evdev_event;
21 
22-    if (!swc_evdev_device_initialize(&entry->device, udev_device))
23+    if (!swc_evdev_device_initialize(&entry->device, device_path))
24     {
25         free(entry);
26         return;