]> git.mdlowis.com Git - proto/labwc.git/commitdiff
libinput: support <dragLock>sticky<dragLock> and enable it by default
authortokyo4j <hrak1529@gmail.com>
Sat, 7 Jun 2025 10:27:05 +0000 (19:27 +0900)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 7 Jun 2025 11:46:53 +0000 (12:46 +0100)
It is recommended by libinput:
https://lists.freedesktop.org/archives/wayland-devel/2024-November/043860.html

docs/labwc-config.5.scd
docs/rc.xml.all
meson.build
src/config/libinput.c
src/config/rcxml.c

index 5f700df2d44e5c4ae247f965df50bc234b8dd780..fb98b3285f15783b0938406eb341fc179b811929 100644 (file)
@@ -958,7 +958,7 @@ extending outward from the snapped edge.
     <tap>yes</tap>
     <tapButtonMap></tapButtonMap>
     <tapAndDrag></tapAndDrag>
-    <dragLock></dragLock>
+    <dragLock>sticky</dragLock>
     <middleEmulation></middleEmulation>
     <disableWhileTyping></disableWhileTyping>
     <clickMethod></clickMethod>
@@ -1027,9 +1027,11 @@ extending outward from the snapped edge.
        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><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><dragLock>* [yes|no|sticky]
+       Enable or disable drag lock for this category. Drag lock ignores a temporary
+       release of a finger during tap-and-dragging. Both *yes* and *sticky* enable
+       drag lock, but if *yes* is set, the drag lock expires after a timeout.
+       Default is *sticky*.
 
 *<libinput><device><middleEmulation>* [yes|no]
        Enable or disable middle button emulation for this category. Middle
index 0bb9182d7c2ad7bfa9095c74847bc61f058121fd..c6f00f64987a53b75654653769a6f52649cd4bfe 100644 (file)
       <tap>yes</tap>
       <tapButtonMap></tapButtonMap>
       <tapAndDrag></tapAndDrag>
-      <dragLock></dragLock>
+      <dragLock>sticky</dragLock>
       <middleEmulation></middleEmulation>
       <disableWhileTyping></disableWhileTyping>
       <clickMethod></clickMethod>
index 51a09427f37eae5426be3d387b9e00a219da6d3d..b83eb8c258c51fa627d20476855d631dd1ae94ed 100644 (file)
@@ -110,6 +110,10 @@ conf_data.set10('HAVE_RSVG', have_rsvg)
 
 conf_data.set10('HAVE_LIBSFDO', have_libsfdo)
 
+foreach sym : ['LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY']
+       conf_data.set10('HAVE_' + sym, cc.has_header_symbol('libinput.h', sym, dependencies: input))
+endforeach
+
 if get_option('static_analyzer').enabled()
   add_project_arguments(['-fanalyzer'], language: 'c')
 endif
index 04b0a2b5af398da8b8525dd5f634e181ad1cb236..f7e07d3aceed845707063024a206b78291f7e5ee 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 #include <string.h>
 #include <strings.h>
-
+#include "config.h"
 #include "common/mem.h"
 #include "common/list.h"
 #include "common/string-helpers.h"
@@ -19,7 +19,11 @@ libinput_category_init(struct libinput_category *l)
        l->tap = LIBINPUT_CONFIG_TAP_ENABLED;
        l->tap_button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
        l->tap_and_drag = -1;
+#if HAVE_LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY
+       l->drag_lock = LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY;
+#else
        l->drag_lock = -1;
+#endif
        l->accel_profile = -1;
        l->middle_emu = -1;
        l->dwt = -1;
index a3e8f85e67f347bdf5cc3fe461eab4f4d195580e..b1bafcd8989045785c5afb8983ea3799dd91f846 100644 (file)
@@ -771,6 +771,16 @@ fill_libinput_category(char *nodename, char *content, struct parser_state *state
                        ? LIBINPUT_CONFIG_DRAG_ENABLED
                        : LIBINPUT_CONFIG_DRAG_DISABLED;
        } else if (!strcasecmp(nodename, "dragLock")) {
+               if (!strcasecmp(content, "sticky")) {
+#if HAVE_LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY
+                       state->current_libinput_category->drag_lock =
+                               LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY;
+#else
+                       wlr_log(WLR_ERROR, "<dragLock>sticky</dragLock> is"
+                               " only supported in libinput >= 1.27");
+#endif
+                       return;
+               }
                int ret = parse_bool(content, -1);
                if (ret < 0) {
                        return;