mirror of
https://github.com/X11Libre/xf86-input-synaptics.git
synced 2026-03-24 01:34:04 +00:00
Force SLOTSTATE_EMPTY on DeviceOff
SLOTSTATE_OPEN_EMPTY on resume leads to erroneously detected touches. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
@@ -662,7 +662,7 @@ EventReadHwState(InputInfoPtr pInfo,
|
||||
SynapticsParameters *para = &priv->synpara;
|
||||
struct eventcomm_proto_data *proto_data = priv->proto_data;
|
||||
|
||||
SynapticsResetTouchHwState(hw);
|
||||
SynapticsResetTouchHwState(hw, FALSE);
|
||||
|
||||
/* Reset cumulative values if buttons were not previously pressed */
|
||||
if (!hw->left && !hw->right && !hw->middle)
|
||||
|
||||
@@ -1619,7 +1619,7 @@ timerFunc(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||
|
||||
priv->hwState->millis += now - priv->timer_time;
|
||||
SynapticsCopyHwState(hw, priv->hwState);
|
||||
SynapticsResetTouchHwState(hw);
|
||||
SynapticsResetTouchHwState(hw, FALSE);
|
||||
delay = HandleState(pInfo, hw, hw->millis, TRUE);
|
||||
|
||||
priv->timer_time = now;
|
||||
@@ -1659,7 +1659,7 @@ ReadInput(InputInfoPtr pInfo)
|
||||
int delay = 0;
|
||||
Bool newDelay = FALSE;
|
||||
|
||||
SynapticsResetTouchHwState(hw);
|
||||
SynapticsResetTouchHwState(hw, FALSE);
|
||||
|
||||
while (SynapticsGetHwState(pInfo, priv, hw)) {
|
||||
/* Semi-mt device touch slots do not track touches. When there is a
|
||||
@@ -3017,7 +3017,7 @@ UpdateTouchState(InputInfoPtr pInfo, struct SynapticsHwState *hw)
|
||||
}
|
||||
}
|
||||
|
||||
SynapticsResetTouchHwState(hw);
|
||||
SynapticsResetTouchHwState(hw, FALSE);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -153,11 +153,11 @@ SynapticsResetHwState(struct SynapticsHwState *hw)
|
||||
hw->middle = 0;
|
||||
memset(hw->multi, 0, sizeof(hw->multi));
|
||||
|
||||
SynapticsResetTouchHwState(hw);
|
||||
SynapticsResetTouchHwState(hw, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
SynapticsResetTouchHwState(struct SynapticsHwState *hw)
|
||||
SynapticsResetTouchHwState(struct SynapticsHwState *hw, Bool set_slot_empty)
|
||||
{
|
||||
#ifdef HAVE_MULTITOUCH
|
||||
int i;
|
||||
@@ -175,7 +175,7 @@ SynapticsResetTouchHwState(struct SynapticsHwState *hw)
|
||||
case SLOTSTATE_OPEN:
|
||||
case SLOTSTATE_OPEN_EMPTY:
|
||||
case SLOTSTATE_UPDATE:
|
||||
hw->slot_state[i] = SLOTSTATE_OPEN_EMPTY;
|
||||
hw->slot_state[i] = set_slot_empty ? SLOTSTATE_EMPTY : SLOTSTATE_OPEN_EMPTY;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -120,7 +120,7 @@ extern void SynapticsHwStateFree(struct SynapticsHwState **hw);
|
||||
extern void SynapticsCopyHwState(struct SynapticsHwState *dst,
|
||||
const struct SynapticsHwState *src);
|
||||
extern void SynapticsResetHwState(struct SynapticsHwState *hw);
|
||||
extern void SynapticsResetTouchHwState(struct SynapticsHwState *hw);
|
||||
extern void SynapticsResetTouchHwState(struct SynapticsHwState *hw, Bool force_empty);
|
||||
|
||||
extern Bool SynapticsIsSoftButtonAreasValid(int *values);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user