Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Jun 2019 03:06:05 +0000 (UTC)
From:      Philip Paeps <philip@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r349098 - head/sys/dev/atkbdc
Message-ID:  <201906160306.x5G3657f046759@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: philip
Date: Sun Jun 16 03:06:05 2019
New Revision: 349098
URL: https://svnweb.freebsd.org/changeset/base/349098

Log:
  Add macOS-like three finger drag trackpad gesture to psm(4)
  
  Submitted by:	Yan Ka Chiu <nyan@myuji.xyz>
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D20648

Modified:
  head/sys/dev/atkbdc/psm.c

Modified: head/sys/dev/atkbdc/psm.c
==============================================================================
--- head/sys/dev/atkbdc/psm.c	Sun Jun 16 01:23:45 2019	(r349097)
+++ head/sys/dev/atkbdc/psm.c	Sun Jun 16 03:06:05 2019	(r349098)
@@ -236,6 +236,7 @@ typedef struct synapticsinfo {
 	int			 softbutton3_x;
 	int			 max_x;
 	int			 max_y;
+	int			 three_finger_drag;
 	int			 natural_scroll;
 } synapticsinfo_t;
 
@@ -572,6 +573,7 @@ enum {
 	SYNAPTICS_SYSCTL_SOFTBUTTONS_Y =	SYN_OFFSET(softbuttons_y),
 	SYNAPTICS_SYSCTL_SOFTBUTTON2_X =	SYN_OFFSET(softbutton2_x),
 	SYNAPTICS_SYSCTL_SOFTBUTTON3_X =	SYN_OFFSET(softbutton3_x),
+	SYNAPTICS_SYSCTL_THREE_FINGER_DRAG = 	SYN_OFFSET(three_finger_drag),
 	SYNAPTICS_SYSCTL_NATURAL_SCROLL =	SYN_OFFSET(natural_scroll),
 #define	SYNAPTICS_SYSCTL_LAST	SYNAPTICS_SYSCTL_NATURAL_SCROLL
 };
@@ -3785,6 +3787,7 @@ psmgestures(struct psm_softc *sc, finger_t *fingers, i
 		int vscroll_hor_area, vscroll_ver_area;
 		int two_finger_scroll;
 		int max_x, max_y;
+		int three_finger_drag;
 
 		/* Read sysctl. */
 		/* XXX Verify values? */
@@ -3799,7 +3802,7 @@ psmgestures(struct psm_softc *sc, finger_t *fingers, i
 		two_finger_scroll = sc->syninfo.two_finger_scroll;
 		max_x = sc->syninfo.max_x;
 		max_y = sc->syninfo.max_y;
-
+		three_finger_drag = sc->syninfo.three_finger_drag;
 		/* Read current absolute position. */
 		x0 = f->x;
 		y0 = f->y;
@@ -3888,8 +3891,8 @@ psmgestures(struct psm_softc *sc, finger_t *fingers, i
 				    ~MOUSE_BUTTON1DOWN) | center_button;
 		}
 
-		/* If in tap-hold, add the recorded button. */
-		if (gest->in_taphold)
+		/* If in tap-hold or three fingers, add the recorded button. */
+		if (gest->in_taphold || (nfingers == 3 && three_finger_drag))
 			ms->button |= gest->tap_button;
 
 		/*
@@ -5755,6 +5758,7 @@ synaptics_sysctl(SYSCTL_HANDLER_ARGS)
 			return (EINVAL);
 		break;
         case SYNAPTICS_SYSCTL_TOUCHPAD_OFF:
+	case SYNAPTICS_SYSCTL_THREE_FINGER_DRAG:
 	case SYNAPTICS_SYSCTL_NATURAL_SCROLL:
 		if (arg < 0 || arg > 1)
 			return (EINVAL);
@@ -6147,6 +6151,14 @@ synaptics_sysctl_create_tree(struct psm_softc *sc, con
 	    sc, SYNAPTICS_SYSCTL_TOUCHPAD_OFF,
 	    synaptics_sysctl, "I",
 	    "Turn off touchpad");
+
+	sc->syninfo.three_finger_drag = 0;
+	SYSCTL_ADD_PROC(&sc->syninfo.sysctl_ctx,
+	    SYSCTL_CHILDREN(sc->syninfo.sysctl_tree), OID_AUTO,
+	    "three_finger_drag", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY,
+	    sc, SYNAPTICS_SYSCTL_THREE_FINGER_DRAG,
+	    synaptics_sysctl, "I",
+	    "Enable dragging with three fingers");
 
 	/* hw.psm.synaptics.natural_scroll. */
 	sc->syninfo.natural_scroll = 0;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201906160306.x5G3657f046759>