diff options
-rw-r--r-- | src/eventcomm.c | 12 | ||||
-rw-r--r-- | src/synaptics.c | 3 |
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 |