config: support <tapAndDrag> and <dragLock>

This commit is contained in:
tokyo4j 2023-09-02 17:32:48 +09:00 committed by Johan Malm
parent 4268991105
commit 3c3656f74e
6 changed files with 48 additions and 0 deletions

View file

@ -407,6 +407,14 @@ Therefore, where multiple objects of the same kind are required (for example
left button, right button, and middle button, respectively (lrm) (the
default), or to left button, middle button, and right button (lmr).
*<libinput><device category=""><tapAndDrag>* [yes|no]
Enable or disable tap-and-drag for this category. Tap-and-drag processes
a tap immediately followed by a finger down as the start of a drag.
*<libinput><device category=""><dragLock>* [yes|no]
Enable or disable drag lock for this category. Drag lock ignores a
momentary release of a finger during tap-and-dragging.
*<libinput><device category=""><middleEmulation>* [yes|no]
Enable or disable middle button emulation for this category. Middle
emulation processes a simultaneous left and right click as a press of

View file

@ -392,6 +392,8 @@
<accelProfile></accelProfile>
<tap>yes</tap>
<tapButtonMap></tapButtonMap>
<tapAndDrag></tapAndDrag>
<dragLock></dragLock>
<middleEmulation></middleEmulation>
<disableWhileTyping></disableWhileTyping>
</device>

View file

@ -21,6 +21,8 @@ struct libinput_category {
int left_handed;
enum libinput_config_tap_state tap;
enum libinput_config_tap_button_map tap_button_map;
enum libinput_config_drag_state tap_and_drag;
enum libinput_config_drag_lock_state drag_lock;
enum libinput_config_accel_profile accel_profile;
enum libinput_config_middle_emulation_state middle_emu;
enum libinput_config_dwt_state dwt;

View file

@ -16,6 +16,8 @@ libinput_category_init(struct libinput_category *l)
l->left_handed = -1;
l->tap = LIBINPUT_CONFIG_TAP_ENABLED;
l->tap_button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
l->tap_and_drag = -1;
l->drag_lock = -1;
l->accel_profile = -1;
l->middle_emu = -1;
l->dwt = -1;

View file

@ -408,6 +408,22 @@ fill_libinput_category(char *nodename, char *content)
} else {
wlr_log(WLR_ERROR, "invalid tapButtonMap");
}
} else if (!strcasecmp(nodename, "tapAndDrag")) {
int ret = parse_bool(content, -1);
if (ret < 0) {
return;
}
current_libinput_category->tap_and_drag = ret
? LIBINPUT_CONFIG_DRAG_ENABLED
: LIBINPUT_CONFIG_DRAG_DISABLED;
} else if (!strcasecmp(nodename, "dragLock")) {
int ret = parse_bool(content, -1);
if (ret < 0) {
return;
}
current_libinput_category->drag_lock = ret
? LIBINPUT_CONFIG_DRAG_LOCK_ENABLED
: LIBINPUT_CONFIG_DRAG_LOCK_DISABLED;
} else if (!strcasecmp(nodename, "accelProfile")) {
current_libinput_category->accel_profile =
get_accel_profile(content);

View file

@ -95,6 +95,24 @@ configure_libinput(struct wlr_input_device *wlr_input_device)
dc->tap_button_map);
}
if (libinput_device_config_tap_get_finger_count(libinput_dev) <= 0
|| dc->tap_and_drag < 0) {
wlr_log(WLR_INFO, "tap-and-drag not configured");
} else {
wlr_log(WLR_INFO, "tap-and-drag configured");
libinput_device_config_tap_set_drag_enabled(
libinput_dev, dc->tap_and_drag);
}
if (libinput_device_config_tap_get_finger_count(libinput_dev) <= 0
|| dc->drag_lock < 0) {
wlr_log(WLR_INFO, "drag lock not configured");
} else {
wlr_log(WLR_INFO, "drag lock configured");
libinput_device_config_tap_set_drag_lock_enabled(
libinput_dev, dc->drag_lock);
}
if (libinput_device_config_scroll_has_natural_scroll(libinput_dev) <= 0
|| dc->natural_scroll < 0) {
wlr_log(WLR_INFO, "natural scroll not configured");