From cc8f7fb99c40538d401371929032004361379a89 Mon Sep 17 00:00:00 2001 From: Mahesh Asolkar Date: Sun, 14 Apr 2024 11:39:45 -0700 Subject: [PATCH] Using device name instead of ID for touchpad * UDEV registers touch pad (e.g., Synaptic) with different IDs on reboots. Instead of hard-coding product/device IDs in config.h, use a string that appears in device name to identify it --- config.mma.def.h | 12 ++---------- dwl.c | 38 ++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/config.mma.def.h b/config.mma.def.h index 0b723eb..8c25f61 100644 --- a/config.mma.def.h +++ b/config.mma.def.h @@ -19,7 +19,8 @@ static const float fullscreen_bg[] = COLOR(0x121212ff); #define TAGCOUNT (9) /* control variables */ -static int cfg_disable_touch_pad = 1; +static int cfg_disable_touchpad = 1; +static const char *cfg_touchpad_device_str = "Synaptic"; /* logging */ static int log_level = WLR_ERROR; @@ -94,15 +95,6 @@ LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE */ static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED; -/* Touch device information to filter touch events - * Use something like this to obtain info: - * - * root@host $ udevadm info --tree | grep -a5 Synaptic | grep -E "PRODUCT|NAME" - * │ │ ┆ E: PRODUCT=11/2(vendor)/7(product)/1b1 - * │ │ ┆ E: NAME="SynPS/2 Synaptics TouchPad" */ -static const uint32_t touch_device_vendor_id = 0x2; -static const uint32_t touch_device_product_id = 0x7; - /* You can choose between: LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE diff --git a/dwl.c b/dwl.c index 897e7d4..6abbc45 100644 --- a/dwl.c +++ b/dwl.c @@ -1051,18 +1051,20 @@ createpointer(struct wlr_pointer *pointer) libinput_device_config_click_set_method (device, click_method); if (libinput_device_config_send_events_get_modes(device)) { - if ((cfg_disable_touch_pad) - && ((libinput_device_get_id_vendor(device) == touch_device_vendor_id) - && (libinput_device_get_id_product(device) == touch_device_product_id))) { - libinput_device_config_send_events_set_mode(device, LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); - touch_input_device = device; - fprintf(stderr,"DWL::createpointer - Disable set to %d events for device %s (%d:%d) == %d:%d\n", - cfg_disable_touch_pad, - libinput_device_get_name(touch_input_device), - libinput_device_get_id_vendor(touch_input_device), - libinput_device_get_id_product(touch_input_device), touch_device_vendor_id, touch_device_product_id); - } else { - libinput_device_config_send_events_set_mode(device, send_events_mode); + const char *dev_name = libinput_device_get_name(device); + if (strstr(dev_name, cfg_touchpad_device_str)) { + fprintf(stderr,"DWL::createpointer - %s device %s (%d:%d). Disable=%d\n", + cfg_touchpad_device_str, + libinput_device_get_name(device), + libinput_device_get_id_vendor(device), + libinput_device_get_id_product(device), + cfg_disable_touchpad); + touch_input_device = device; // Capture touchpad device + if (cfg_disable_touchpad) { + libinput_device_config_send_events_set_mode(device, LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); + } else { + libinput_device_config_send_events_set_mode(device, send_events_mode); + } } } @@ -2857,18 +2859,18 @@ tile(Monitor *m) void toggle_touch_input_device(const Arg *arg) { - if (cfg_disable_touch_pad) { + if (cfg_disable_touchpad) { libinput_device_config_send_events_set_mode(touch_input_device, send_events_mode); - cfg_disable_touch_pad = 0; + cfg_disable_touchpad = 0; } else { libinput_device_config_send_events_set_mode(touch_input_device, LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); - cfg_disable_touch_pad = 1; + cfg_disable_touchpad = 1; } - fprintf(stderr,"DWL::toggle_touch_input_device - Disable set to %d events for device %s (%d:%d) == %d:%d\n", - cfg_disable_touch_pad, + fprintf(stderr,"DWL::toggle_touch_input_device - Disable set to %d events for device %s (%d:%d)\n", + cfg_disable_touchpad, libinput_device_get_name(touch_input_device), libinput_device_get_id_vendor(touch_input_device), - libinput_device_get_id_product(touch_input_device), touch_device_vendor_id, touch_device_product_id); + libinput_device_get_id_product(touch_input_device)); } void