summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eventcomm.c12
-rw-r--r--src/synaptics.c3
2 files changed, 15 insertions, 0 deletions
diff --git a/src/eventcomm.c b/src/eventcomm.c
index e789f0e..4850331 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -606,6 +606,14 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
hw->slot_state[slot_index] = SLOTSTATE_CLOSE;
proto_data->num_touches--;
}
+
+ /* When there are no fingers on the touchpad, set width and
+ * pressure to zero as ABS_MT_TOUCH_MAJOR and ABS_MT_PRESSURE
+ * are not zero when fingers are released. */
+ if (proto_data->num_touches == 0) {
+ hw->fingerWidth = 0;
+ hw->z = 0;
+ }
}
else {
ValuatorMask *mask = proto_data->last_mt_vals[slot_index];
@@ -618,6 +626,10 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
hw->cumulative_dx += ev->value - last_val;
else if (ev->code == ABS_MT_POSITION_Y)
hw->cumulative_dy += ev->value - last_val;
+ else if (ev->code == ABS_MT_TOUCH_MAJOR)
+ hw->fingerWidth = ev->value;
+ else if (ev->code == ABS_MT_PRESSURE)
+ hw->z = ev->value;
}
valuator_mask_set(mask, map, ev->value);
diff --git a/src/synaptics.c b/src/synaptics.c
index 756751d..9807439 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1829,6 +1829,9 @@ SynapticsDetectFinger(SynapticsPrivate * priv, struct SynapticsHwState *hw)
if ((hw->z > para->palm_min_z) && (hw->fingerWidth > para->palm_min_width))
return FS_BLOCKED;
+ if (priv->has_touch)
+ return finger;
+
if (hw->x == 0 || priv->finger_state == FS_UNTOUCHED)
priv->avg_width = 0;
else