Hi,

Can I add sysctl node to disable two finger scroll as follows?

And
https://mail-index.netbsd.org/source-changes/2020/03/14/msg115107.html
is essential for my Synaptics 8.16 TouchPad in HP Sectre x360 13-inch
year 2017 model (ae019TU).
If it is removed, I cannot perform any drag-and-drop with two fingers.
My patch also adds this part if two finger scroll is disabled.

Index: sys/dev/pckbport/synaptics.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pckbport/synaptics.c,v
retrieving revision 1.62
diff -u -r1.62 synaptics.c
--- sys/dev/pckbport/synaptics.c        16 Mar 2020 11:13:19 -0000      1.62
+++ sys/dev/pckbport/synaptics.c        18 Mar 2020 03:52:45 -0000
@@ -124,6 +124,7 @@
 static int synaptics_fscroll_max = 14;
 static int synaptics_dz_hold = 30;
 static int synaptics_movement_enable = 1;
+static int synaptics_finger_scroll_enable = 1;
 
 /* Sysctl nodes. */
 static int synaptics_button_boundary_nodenum;
@@ -152,6 +153,7 @@
 static int synaptics_finger_scroll_max_nodenum;
 static int synaptics_dz_hold_nodenum;
 static int synaptics_movement_enable_nodenum;
+static int synaptics_finger_scroll_enable_nodenum;
 
 static int
 synaptics_poll_cmd(struct pms_softc *psc, ...)
@@ -763,6 +765,18 @@
 
        if ((rc = sysctl_createv(clog, 0, NULL, &node,
            CTLFLAG_PERMANENT | CTLFLAG_READWRITE,
+           CTLTYPE_INT, "finger_scroll_enable",
+           SYSCTL_DESCR("Enable finger scroll"),
+           pms_sysctl_synaptics_verify, 0,
+           &synaptics_finger_scroll_enable,
+           0, CTL_HW, root_num, CTL_CREATE,
+           CTL_EOL)) != 0)
+               goto err;
+
+       synaptics_finger_scroll_enable_nodenum = node->sysctl_num;
+
+       if ((rc = sysctl_createv(clog, 0, NULL, &node,
+           CTLFLAG_PERMANENT | CTLFLAG_READWRITE,
            CTLTYPE_INT, "button_boundary",
            SYSCTL_DESCR("Top edge of button area"),
            pms_sysctl_synaptics_verify, 0,
@@ -921,7 +935,8 @@
                if (t < 0)
                        return (EINVAL);
        } else
-       if (node.sysctl_num == synaptics_movement_enable_nodenum) {
+       if (node.sysctl_num == synaptics_movement_enable_nodenum ||
+           node.sysctl_num == synaptics_finger_scroll_enable_nodenum) {
                if (t < 0 || t > 1)
                        return (EINVAL);
        } else
@@ -1285,7 +1300,15 @@
                return (0);
        }
 
-       if (sc->flags & SYN_FLAG_HAS_MULTI_FINGER) {
+       /*
+        * If two finger scroll is disabled,
+        * detect 2 and 3 fingers if supported, but only if multiple
+        * fingers appear within the tap gesture time period.
+        */
+       if ((sc->flags & SYN_FLAG_HAS_MULTI_FINGER &&
+           synaptics_finger_scroll_enable) ||
+           SYN_TIME(sc, sc->gesture_start_packet,
+           sp->sp_finger) < synaptics_gesture_length) {
                switch (sp->sp_w) {
                case SYNAPTICS_WIDTH_TWO_FINGERS:
                        fingers = 2;
@@ -1732,7 +1755,7 @@
 
                        synaptics_movement(sc, sp, sp->sp_finger,
                                z_emul, &dx, &dy, &dz);
-               } else if (fingers > 1) {
+               } else if (fingers > 1 && synaptics_finger_scroll_enable) {
                        /*
                         * Multiple finger movement. Interpret it as scrolling.
                         */


nia <[email protected]> writes:

> I've just committed a handful of changes to synaptics.c that give me
> smooth two-finger scrolling out of the box.
>
> I'm curious how many others are using multitouch touchpads and whether
> you notice any improvement.
>
> The existing approximation (sysctl hw.synaptics.finger_scroll...) wasn't
> working for me at all, tweaking hw.synaptics.finger_scroll-min either
> gave me no scrolling or registered normal mouse movements as scrolling
>
> I suspect my fingers are significantly smaller than whoever wrote this
> code. Was anyone using this successfully, and how does scrolling compare
> after my changes?

-- 
Ryo ONODERA // [email protected]
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3

Reply via email to