commit f2a0e81b2438853e12a2b8fe9bddde154852d85d
parent 59f629238309e230b0e353e73d4f37a7de7fe820
Author: Simon Ser <contact@emersion.fr>
Date: Thu, 7 Mar 2024 12:16:11 +0100
Fetch input device vendor/product from libinput
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4582
Diffstat:
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c
@@ -65,8 +65,15 @@ struct sway_seat *input_manager_sway_seat_from_wlr_seat(struct wlr_seat *wlr_sea
}
char *input_device_get_identifier(struct wlr_input_device *device) {
- int vendor = device->vendor;
- int product = device->product;
+ int vendor = 0, product = 0;
+#if WLR_HAS_LIBINPUT_BACKEND
+ if (wlr_input_device_is_libinput(device)) {
+ struct libinput_device *libinput_dev = wlr_libinput_get_device_handle(device);
+ vendor = libinput_device_get_id_vendor(libinput_dev);
+ product = libinput_device_get_id_product(libinput_dev);
+ }
+#endif
+
char *name = strdup(device->name ? device->name : "");
strip_whitespace(name);
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
@@ -1097,10 +1097,6 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
json_object_new_string(device->identifier));
json_object_object_add(object, "name",
json_object_new_string(device->wlr_device->name));
- json_object_object_add(object, "vendor",
- json_object_new_int(device->wlr_device->vendor));
- json_object_object_add(object, "product",
- json_object_new_int(device->wlr_device->product));
json_object_object_add(object, "type",
json_object_new_string(
input_device_get_type(device)));
@@ -1154,6 +1150,10 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
libinput_dev = wlr_libinput_get_device_handle(device->wlr_device);
json_object_object_add(object, "libinput",
describe_libinput_device(libinput_dev));
+ json_object_object_add(object, "vendor",
+ json_object_new_int(libinput_device_get_id_vendor(libinput_dev)));
+ json_object_object_add(object, "product",
+ json_object_new_int(libinput_device_get_id_product(libinput_dev)));
}
#endif