[PATCH v2 libinput 1/2] evdev: remove tag_device from evdev_dispatch_interface

Benjamin Tissoires benjamin.tissoires at gmail.com
Tue Jun 2 14:22:41 PDT 2015


Tagging a device should occurs only once during configure. We do not
have device that can be changed after they are configured, so there is no
point in having the tagging part in a deferred struct.
Plus, the note saying that we tag with only one of EVDEV_TAG was wrong.

Now that we are chosing when we call each evdev_tag_*, we can also get
rid of the device->seat_caps tests.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires at gmail.com>
---
new in v2

 src/evdev-mt-touchpad.c |  7 +++----
 src/evdev.c             | 32 +++++++++-----------------------
 src/evdev.h             |  8 ++++----
 3 files changed, 16 insertions(+), 31 deletions(-)

diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index eacec6e..aa9fa57 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -1137,9 +1137,9 @@ tp_interface_device_removed(struct evdev_device *device,
 	tp_resume(tp, device);
 }
 
-static void
-tp_interface_tag_device(struct evdev_device *device,
-			struct udev_device *udev_device)
+void
+evdev_tag_touchpad(struct evdev_device *device,
+		   struct udev_device *udev_device)
 {
 	int bustype;
 
@@ -1169,7 +1169,6 @@ static struct evdev_dispatch_interface tp_interface = {
 	tp_interface_device_removed,
 	tp_interface_device_removed, /* device_suspended, treat as remove */
 	tp_interface_device_added,   /* device_resumed, treat as add */
-	tp_interface_tag_device,
 };
 
 static void
diff --git a/src/evdev.c b/src/evdev.c
index 8932b6c..df46bb9 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -724,10 +724,8 @@ evdev_tag_external_mouse(struct evdev_device *device,
 	int bustype;
 
 	bustype = libevdev_get_id_bustype(device->evdev);
-	if (bustype == BUS_USB || bustype == BUS_BLUETOOTH) {
-		if (device->seat_caps & EVDEV_DEVICE_POINTER)
-			device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
-	}
+	if (bustype == BUS_USB || bustype == BUS_BLUETOOTH)
+		device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
 }
 
 static void
@@ -852,15 +850,6 @@ fallback_destroy(struct evdev_dispatch *dispatch)
 	free(dispatch);
 }
 
-static void
-fallback_tag_device(struct evdev_device *device,
-		    struct udev_device *udev_device)
-{
-	evdev_tag_external_mouse(device, udev_device);
-	evdev_tag_trackpoint(device, udev_device);
-	evdev_tag_keyboard(device, udev_device);
-}
-
 static int
 evdev_calibration_has_matrix(struct libinput_device *libinput_device)
 {
@@ -911,7 +900,6 @@ struct evdev_dispatch_interface fallback_interface = {
 	NULL, /* device_removed */
 	NULL, /* device_suspended */
 	NULL, /* device_resumed */
-	fallback_tag_device,
 };
 
 static uint32_t
@@ -1432,14 +1420,6 @@ evdev_need_mtdev(struct evdev_device *device)
 		!libevdev_has_event_code(evdev, EV_ABS, ABS_MT_SLOT));
 }
 
-static void
-evdev_tag_device(struct evdev_device *device)
-{
-	if (device->dispatch->interface->tag_device)
-		device->dispatch->interface->tag_device(device,
-							device->udev_device);
-}
-
 static inline int
 evdev_read_wheel_click_prop(struct evdev_device *device)
 {
@@ -1902,6 +1882,8 @@ evdev_configure_device(struct evdev_device *device)
 		log_info(libinput,
 			 "input device '%s', %s is a touchpad\n",
 			 device->devname, devnode);
+
+		evdev_tag_touchpad(device, device->udev_device);
 		return device->dispatch == NULL ? -1 : 0;
 	}
 
@@ -1926,6 +1908,9 @@ evdev_configure_device(struct evdev_device *device)
 		device->scroll.natural_scrolling_enabled = true;
 		/* want button scrolling config option */
 		device->scroll.want_button = 1;
+
+		evdev_tag_external_mouse(device, device->udev_device);
+		evdev_tag_trackpoint(device, device->udev_device);
 	}
 
 	if (udev_tags & EVDEV_UDEV_TAG_KEYBOARD) {
@@ -1940,6 +1925,8 @@ evdev_configure_device(struct evdev_device *device)
 			device->scroll.natural_scrolling_enabled = true;
 			device->seat_caps |= EVDEV_DEVICE_POINTER;
 		}
+
+		evdev_tag_keyboard(device, device->udev_device);
 	}
 
 	if (udev_tags & EVDEV_UDEV_TAG_TOUCHSCREEN) {
@@ -2124,7 +2111,6 @@ evdev_device_create(struct libinput_seat *seat,
 
 	list_insert(seat->devices_list.prev, &device->base.link);
 
-	evdev_tag_device(device);
 	evdev_notify_added_device(device);
 
 	return device;
diff --git a/src/evdev.h b/src/evdev.h
index 3f63c57..a875663 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -256,10 +256,6 @@ struct evdev_dispatch_interface {
 	/* A device was resumed */
 	void (*device_resumed)(struct evdev_device *device,
 			       struct evdev_device *resumed_device);
-
-	/* Tag device with one of EVDEV_TAG */
-	void (*tag_device)(struct evdev_device *device,
-			   struct udev_device *udev_device);
 };
 
 struct evdev_dispatch {
@@ -294,6 +290,10 @@ struct evdev_dispatch *
 evdev_mt_touchpad_create(struct evdev_device *device);
 
 void
+evdev_tag_touchpad(struct evdev_device *device,
+		   struct udev_device *udev_device);
+
+void
 evdev_device_led_update(struct evdev_device *device, enum libinput_led leds);
 
 int
-- 
2.4.0



More information about the wayland-devel mailing list