mirror of
https://github.com/labwc/labwc.git
synced 2025-11-04 13:30:07 -05:00
Add touchpad device type
It is nice to have finer granularity for device types to allow for configurations such as using `naturalScroll` on touchpads, but not on regular pointer devices such as mice.
This commit is contained in:
parent
e3cd189769
commit
6faee17d20
6 changed files with 30 additions and 15 deletions
|
|
@ -435,11 +435,11 @@ windows using the mouse.
|
||||||
*<libinput><device category="">*
|
*<libinput><device category="">*
|
||||||
Define a category of devices to use the configuration values that
|
Define a category of devices to use the configuration values that
|
||||||
follow. The category can be set to touch (devices that define a width
|
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
|
and height), touchpad, non-touch, default, or the name of a device. You
|
||||||
your devices name by running *libinput list-devices* (you may need to
|
can obtain your devices name by running *libinput list-devices* (you may
|
||||||
be root or a part of the input group to perform this.) Any members of
|
need to be root or a part of the input group to perform this.) Any
|
||||||
this category that are not set use the default for the device. With the
|
members of this category that are not set use the default for the
|
||||||
exception of tap-to-click, which is enabled by default.
|
device. With the exception of tap-to-click, which is enabled by default.
|
||||||
|
|
||||||
*<libinput><device category=""><naturalScroll>* [yes|no]
|
*<libinput><device category=""><naturalScroll>* [yes|no]
|
||||||
Use natural scrolling for this category if available.
|
Use natural scrolling for this category if available.
|
||||||
|
|
|
||||||
|
|
@ -394,9 +394,9 @@
|
||||||
</mouse>
|
</mouse>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The *category* element can be set to touch, non-touch, default or the name
|
The *category* element can be set to touch, touchpad, non-touch, default or
|
||||||
of a device. You can obtain device names by running *libinput list-devices*
|
the name of a device. You can obtain device names by running *libinput
|
||||||
as root or member of the input group.
|
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
|
Tap is set to *yes* be default. All others are left blank in order to use
|
||||||
device defaults.
|
device defaults.
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
enum device_type {
|
enum device_type {
|
||||||
DEFAULT_DEVICE,
|
DEFAULT_DEVICE,
|
||||||
TOUCH_DEVICE,
|
TOUCH_DEVICE,
|
||||||
|
TOUCHPAD_DEVICE,
|
||||||
NON_TOUCH_DEVICE,
|
NON_TOUCH_DEVICE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,9 @@ get_device_type(const char *s)
|
||||||
if (!strcasecmp(s, "touch")) {
|
if (!strcasecmp(s, "touch")) {
|
||||||
return TOUCH_DEVICE;
|
return TOUCH_DEVICE;
|
||||||
}
|
}
|
||||||
|
if (!strcasecmp(s, "touchpad")) {
|
||||||
|
return TOUCHPAD_DEVICE;
|
||||||
|
}
|
||||||
if (!strcasecmp(s, "non-touch")) {
|
if (!strcasecmp(s, "non-touch")) {
|
||||||
return NON_TOUCH_DEVICE;
|
return NON_TOUCH_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -460,6 +460,7 @@ fill_libinput_category(char *nodename, char *content)
|
||||||
|
|
||||||
if (!strcmp(nodename, "category")) {
|
if (!strcmp(nodename, "category")) {
|
||||||
if (!strcmp(content, "touch")
|
if (!strcmp(content, "touch")
|
||||||
|
|| !strcmp(content, "touchpad")
|
||||||
|| !strcmp(content, "non-touch")
|
|| !strcmp(content, "non-touch")
|
||||||
|| !strcmp(content, "default")) {
|
|| !strcmp(content, "default")) {
|
||||||
current_libinput_category->type = get_device_type(content);
|
current_libinput_category->type = get_device_type(content);
|
||||||
|
|
|
||||||
24
src/seat.c
24
src/seat.c
|
|
@ -33,17 +33,28 @@ input_device_destroy(struct wl_listener *listener, void *data)
|
||||||
free(input);
|
free(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static enum device_type
|
||||||
is_touch_device(struct wlr_input_device *wlr_input_device)
|
device_type_from_wlr_device(struct wlr_input_device *wlr_input_device)
|
||||||
{
|
{
|
||||||
switch (wlr_input_device->type) {
|
switch (wlr_input_device->type) {
|
||||||
case WLR_INPUT_DEVICE_TOUCH:
|
case WLR_INPUT_DEVICE_TOUCH:
|
||||||
case WLR_INPUT_DEVICE_TABLET_TOOL:
|
case WLR_INPUT_DEVICE_TABLET_TOOL:
|
||||||
return true;
|
return TOUCH_DEVICE;
|
||||||
default:
|
default:
|
||||||
break;
|
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
|
static void
|
||||||
|
|
@ -64,9 +75,8 @@ configure_libinput(struct wlr_input_device *wlr_input_device)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum device_type current_type;
|
enum device_type current_type =
|
||||||
current_type = is_touch_device(wlr_input_device)
|
device_type_from_wlr_device(wlr_input_device);
|
||||||
? TOUCH_DEVICE : NON_TOUCH_DEVICE;
|
|
||||||
|
|
||||||
struct libinput_category *device_category, *dc = NULL;
|
struct libinput_category *device_category, *dc = NULL;
|
||||||
wl_list_for_each(device_category, &rc.libinput_categories, link) {
|
wl_list_for_each(device_category, &rc.libinput_categories, link) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue