*<libinput><device category="">*
Define a category of devices to use the configuration values that
follow. The category can be set to touch (devices that define a width
- and height), non-touch, default, or the name of a device. You can obtain
- your devices name by running *libinput list-devices* (you may need to
- be root or a part of the input group to perform this.) Any members of
- this category that are not set use the default for the device. With the
- exception of tap-to-click, which is enabled by default.
+ and height), touchpad, non-touch, default, or the name of a device. You
+ can obtain your devices name by running *libinput list-devices* (you may
+ need to be root or a part of the input group to perform this.) Any
+ members of this category that are not set use the default for the
+ device. With the exception of tap-to-click, which is enabled by default.
*<libinput><device category=""><naturalScroll>* [yes|no]
Use natural scrolling for this category if available.
</mouse>
<!--
- The *category* element can be set to touch, non-touch, default or the name
- of a device. You can obtain device names by running *libinput list-devices*
- as root or member of the input group.
+ The *category* element can be set to touch, touchpad, non-touch, default or
+ the name of a device. You can obtain device names by running *libinput
+ list-devices* as root or member of the input group.
Tap is set to *yes* be default. All others are left blank in order to use
device defaults.
enum device_type {
DEFAULT_DEVICE,
TOUCH_DEVICE,
+ TOUCHPAD_DEVICE,
NON_TOUCH_DEVICE,
};
if (!strcasecmp(s, "touch")) {
return TOUCH_DEVICE;
}
+ if (!strcasecmp(s, "touchpad")) {
+ return TOUCHPAD_DEVICE;
+ }
if (!strcasecmp(s, "non-touch")) {
return NON_TOUCH_DEVICE;
}
if (!strcmp(nodename, "category")) {
if (!strcmp(content, "touch")
+ || !strcmp(content, "touchpad")
|| !strcmp(content, "non-touch")
|| !strcmp(content, "default")) {
current_libinput_category->type = get_device_type(content);
free(input);
}
-static bool
-is_touch_device(struct wlr_input_device *wlr_input_device)
+static enum device_type
+device_type_from_wlr_device(struct wlr_input_device *wlr_input_device)
{
switch (wlr_input_device->type) {
case WLR_INPUT_DEVICE_TOUCH:
case WLR_INPUT_DEVICE_TABLET_TOOL:
- return true;
+ return TOUCH_DEVICE;
default:
break;
}
- return false;
+
+ if (wlr_input_device->type == WLR_INPUT_DEVICE_POINTER &&
+ wlr_input_device_is_libinput(wlr_input_device)) {
+ struct libinput_device *libinput_device =
+ wlr_libinput_get_device_handle(wlr_input_device);
+
+ if (libinput_device_config_tap_get_finger_count(libinput_device) > 0) {
+ return TOUCHPAD_DEVICE;
+ }
+ }
+
+ return NON_TOUCH_DEVICE;
}
static void
return;
}
- enum device_type current_type;
- current_type = is_touch_device(wlr_input_device)
- ? TOUCH_DEVICE : NON_TOUCH_DEVICE;
+ enum device_type current_type =
+ device_type_from_wlr_device(wlr_input_device);
struct libinput_category *device_category, *dc = NULL;
wl_list_for_each(device_category, &rc.libinput_categories, link) {