Page MenuHomeFreeBSD

D20447.id58188.diff
No OneTemporary

D20447.id58188.diff

Index: head/sys/dev/atkbdc/psm.c
===================================================================
--- head/sys/dev/atkbdc/psm.c
+++ head/sys/dev/atkbdc/psm.c
@@ -236,6 +236,7 @@
int softbutton3_x;
int max_x;
int max_y;
+ int natural_scroll;
} synapticsinfo_t;
typedef struct synapticspacket {
@@ -571,6 +572,8 @@
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_NATURAL_SCROLL = SYN_OFFSET(natural_scroll),
+#define SYNAPTICS_SYSCTL_LAST SYNAPTICS_SYSCTL_NATURAL_SCROLL
};
/* packet formatting function */
@@ -4134,6 +4137,7 @@
int len, weight_prev_x, weight_prev_y;
int div_max_x, div_max_y, div_x, div_y;
int is_fuzzy;
+ int natural_scroll;
/* Read sysctl. */
/* XXX Verify values? */
@@ -4161,6 +4165,7 @@
two_finger_scroll = sc->syninfo.two_finger_scroll;
max_x = sc->syninfo.max_x;
max_y = sc->syninfo.max_y;
+ natural_scroll = sc->syninfo.natural_scroll;
is_fuzzy = (f->flags & PSM_FINGER_FUZZY) != 0;
@@ -4322,14 +4327,24 @@
smoother_id, dx, dy, dxp, dyp));
break;
case 1: /* Vertical scrolling. */
- if (dyp != 0)
- ms->button |= (dyp > 0) ?
- MOUSE_BUTTON4DOWN : MOUSE_BUTTON5DOWN;
+ if (dyp != 0) {
+ if (two_finger_scroll && natural_scroll)
+ ms->button |= (dyp > 0) ?
+ MOUSE_BUTTON5DOWN : MOUSE_BUTTON4DOWN;
+ else
+ ms->button |= (dyp > 0) ?
+ MOUSE_BUTTON4DOWN : MOUSE_BUTTON5DOWN;
+ }
break;
case 2: /* Horizontal scrolling. */
- if (dxp != 0)
- ms->button |= (dxp > 0) ?
- MOUSE_BUTTON7DOWN : MOUSE_BUTTON6DOWN;
+ if (dxp != 0) {
+ if (two_finger_scroll && natural_scroll)
+ ms->button |= (dxp > 0) ?
+ MOUSE_BUTTON6DOWN : MOUSE_BUTTON7DOWN;
+ else
+ ms->button |= (dxp > 0) ?
+ MOUSE_BUTTON7DOWN : MOUSE_BUTTON6DOWN;
+ }
break;
}
@@ -5641,7 +5656,7 @@
int error, arg;
if (oidp->oid_arg1 == NULL || oidp->oid_arg2 < 0 ||
- oidp->oid_arg2 > SYNAPTICS_SYSCTL_SOFTBUTTON3_X)
+ oidp->oid_arg2 > SYNAPTICS_SYSCTL_LAST)
return (EINVAL);
sc = oidp->oid_arg1;
@@ -5730,6 +5745,7 @@
return (EINVAL);
break;
case SYNAPTICS_SYSCTL_TOUCHPAD_OFF:
+ case SYNAPTICS_SYSCTL_NATURAL_SCROLL:
if (arg < 0 || arg > 1)
return (EINVAL);
break;
@@ -6121,6 +6137,15 @@
sc, SYNAPTICS_SYSCTL_TOUCHPAD_OFF,
synaptics_sysctl, "I",
"Turn off touchpad");
+
+ /* hw.psm.synaptics.natural_scroll. */
+ sc->syninfo.natural_scroll = 0;
+ SYSCTL_ADD_PROC(&sc->syninfo.sysctl_ctx,
+ SYSCTL_CHILDREN(sc->syninfo.sysctl_tree), OID_AUTO,
+ "natural_scroll", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY,
+ sc, SYNAPTICS_SYSCTL_NATURAL_SCROLL,
+ synaptics_sysctl, "I",
+ "Enable natural scrolling");
sc->syninfo.softbuttons_y = 0;
sc->syninfo.softbutton2_x = 0;

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 28, 7:28 PM (14 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26297051
Default Alt Text
D20447.id58188.diff (2 KB)

Event Timeline