aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/atkbdc
diff options
context:
space:
mode:
authorPhilip Paeps <philip@FreeBSD.org>2019-06-16 03:06:05 +0000
committerPhilip Paeps <philip@FreeBSD.org>2019-06-16 03:06:05 +0000
commit5a037b11974c8c74c7df22378633caca71456a53 (patch)
treecc912e5048634a0d96d704804810b2457d9bd793 /sys/dev/atkbdc
parent6e14f601aa609d39ccfc39877aebb1a40b6a2cd4 (diff)
Notes
Diffstat (limited to 'sys/dev/atkbdc')
-rw-r--r--sys/dev/atkbdc/psm.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c
index eba064cc8fc1..e667e788c528 100644
--- a/sys/dev/atkbdc/psm.c
+++ b/sys/dev/atkbdc/psm.c
@@ -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, int nfingers,
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, int nfingers,
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, int nfingers,
~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);
@@ -6148,6 +6152,14 @@ synaptics_sysctl_create_tree(struct psm_softc *sc, const char *name,
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;
SYSCTL_ADD_PROC(&sc->syninfo.sysctl_ctx,