svn commit: r317814 - head/sys/dev/atkbdc

Vladimir Kondratyev wulf at FreeBSD.org
Thu May 4 23:02:35 UTC 2017


Author: wulf
Date: Thu May  4 23:02:34 2017
New Revision: 317814
URL: https://svnweb.freebsd.org/changeset/base/317814

Log:
  psm(4): reduce cursor jumping on palm detection
  
  This is done with discarding pointer movements rather then mouse packets
  
  Reviewed by:	gonzo
  Approved by:	gonzo (mentor)
  MFC after:	2 weeks
  Differential Revision:	https://reviews.freebsd.org/D10266

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

Modified: head/sys/dev/atkbdc/psm.c
==============================================================================
--- head/sys/dev/atkbdc/psm.c	Thu May  4 22:53:45 2017	(r317813)
+++ head/sys/dev/atkbdc/psm.c	Thu May  4 23:02:34 2017	(r317814)
@@ -3017,13 +3017,15 @@ proc_synaptics(struct psm_softc *sc, pac
 
 	ms->button = touchpad_buttons;
 
+	psmgestures(sc, &f[0], nfingers, ms);
+	for (id = 0; id < PSM_FINGERS; id++)
+		psmsmoother(sc, &f[id], id, ms, x, y);
+
 	/* Palm detection doesn't terminate the current action. */
-	if (!psmpalmdetect(sc, &f[0], nfingers)) {
-		psmgestures(sc, &f[0], nfingers, ms);
-		for (id = 0; id < PSM_FINGERS; id++)
-			psmsmoother(sc, &f[id], id, ms, x, y);
-	} else {
-		VLOG(2, (LOG_DEBUG, "synaptics: palm detected! (%d)\n", f[0].w));
+	if (psmpalmdetect(sc, &f[0], nfingers)) {
+		*x = *y = *z = 0;
+		ms->button = ms->obutton;
+		return (0);
 	}
 
 	ms->button |= extended_buttons | guest_buttons;
@@ -3077,6 +3079,7 @@ psmpalmdetect(struct psm_softc *sc, fing
 		 *    [min_pressure; max_pressure]
 		 *  - pen aren't supported but PSM_FINGER_IS_PEN is set
 		 */
+		VLOG(2, (LOG_DEBUG, "synaptics: palm detected! (%d)\n", f->w));
 		return (1);
 	}
 	return (0);
@@ -4035,20 +4038,14 @@ proc_elantech(struct psm_softc *sc, pack
 
 	ms->button = touchpad_button | trackpoint_button;
 
-	/* Palm detection doesn't terminate the current action. */
-	if (!psmpalmdetect(sc, &f[0], nfingers)) {
-		/* Send finger 1 position to gesture processor */
-		if (PSM_FINGER_IS_SET(f[0]) || PSM_FINGER_IS_SET(f[1]) ||
-		    nfingers == 0)
-			psmgestures(sc, &f[0], imin(nfingers, 3), ms);
-		/* Send fingers positions to movement smoothers */
-		for (id = 0; id < PSM_FINGERS; id++)
-			if (PSM_FINGER_IS_SET(f[id]) || !(mask & (1 << id)))
-				psmsmoother(sc, &f[id], id, ms, x, y);
-	} else {
-		VLOG(2, (LOG_DEBUG, "elantech: palm detected! (%d)\n",
-		    f[0].w));
-	}
+	/* Send finger 1 position to gesture processor */
+	if (PSM_FINGER_IS_SET(f[0]) || PSM_FINGER_IS_SET(f[1]) ||
+	    nfingers == 0)
+		psmgestures(sc, &f[0], imin(nfingers, 3), ms);
+	/* Send fingers positions to movement smoothers */
+	for (id = 0; id < PSM_FINGERS; id++)
+		if (PSM_FINGER_IS_SET(f[id]) || !(mask & (1 << id)))
+			psmsmoother(sc, &f[id], id, ms, x, y);
 
 	/* Store current finger positions in action context */
 	for (id = 0; id < ELANTECH_MAX_FINGERS; id++) {
@@ -4059,6 +4056,13 @@ proc_elantech(struct psm_softc *sc, pack
 	}
 	sc->elanaction.mask = mask;
 
+	/* Palm detection doesn't terminate the current action. */
+	if (psmpalmdetect(sc, &f[0], nfingers)) {
+		*x = *y = *z = 0;
+		ms->button = ms->obutton;
+		return (0);
+	}
+
 	/* Use the extra buttons as a scrollwheel */
 	if (ms->button & MOUSE_BUTTON4DOWN)
 		*z = -1;


More information about the svn-src-head mailing list