diff --git a/sway/commands/input/drag_lock.c b/sway/commands/input/drag_lock.c index 24c548e2..55a39a64 100644 --- a/sway/commands/input/drag_lock.c +++ b/sway/commands/input/drag_lock.c @@ -15,6 +15,11 @@ struct cmd_results *input_cmd_drag_lock(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "No input device defined."); } +#if HAVE_LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY + if (strcmp(argv[0], "enabled_sticky")) { + ic->drag_lock = LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY; + } else +#endif if (parse_boolean(argv[0], true)) { ic->drag_lock = LIBINPUT_CONFIG_DRAG_LOCK_ENABLED; } else { diff --git a/sway/input/libinput.c b/sway/input/libinput.c index 2fec290e..ad859270 100644 --- a/sway/input/libinput.c +++ b/sway/input/libinput.c @@ -272,6 +272,10 @@ bool sway_input_configure_libinput_device(struct sway_input_device *input_device } if (ic->drag_lock != INT_MIN) { changed |= set_tap_drag_lock(device, ic->drag_lock); + } else { +#if HAVE_LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY + changed |= set_tap_drag_lock(device, LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY); +#endif } if (ic->pointer_accel != FLT_MIN) { changed |= set_accel_speed(device, ic->pointer_accel); @@ -354,8 +358,12 @@ void sway_input_reset_libinput_device(struct sway_input_device *input_device) { libinput_device_config_tap_get_default_button_map(device)); changed |= set_tap_drag(device, libinput_device_config_tap_get_default_drag_enabled(device)); +#if HAVE_LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY + changed |= set_tap_drag_lock(device, LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY); +#else changed |= set_tap_drag_lock(device, libinput_device_config_tap_get_default_drag_lock_enabled(device)); +#endif changed |= set_accel_speed(device, libinput_device_config_accel_get_default_speed(device)); changed |= set_rotation_angle(device, diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd index fbef2a32..18744a22 100644 --- a/sway/sway-input.5.scd +++ b/sway/sway-input.5.scd @@ -152,8 +152,9 @@ The following commands may only be used in the configuration file. *input* drag enabled|disabled Enables or disables tap-and-drag for specified input device. -*input* drag_lock enabled|disabled - Enables or disables drag lock for specified input device. +*input* drag_lock enabled|disabled|enabled_sticky + Enables or disables drag lock for specified input device. The default is + _enabled_sticky_. *input* dwt enabled|disabled Enables or disables disable-while-typing for the specified input device. diff --git a/sway/sway-ipc.7.scd b/sway/sway-ipc.7.scd index e90abcbb..fe6bb92e 100644 --- a/sway/sway-ipc.7.scd +++ b/sway/sway-ipc.7.scd @@ -1174,7 +1174,8 @@ following properties will be included for devices that support them: : Whether tap-and-drag is enabled. It can be _enabled_ or _disabled_ |- tap_drag_lock : string -: Whether drag-lock is enabled. It can be _enabled_ or _disabled_ +: Whether drag-lock is enabled. It can be _enabled_, _disabled_ or + _enabled_sticky_ |- accel_speed : double : The pointer-acceleration in use