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
