Hi, On 03/17/2014 05:55 AM, Peter Hutterer wrote: > Enabling clicks in off mode also allows for the new Lenovo *40 series to use > the top software buttons while the touchpad is disabled. This benefits those > that usually disable touchpads altogether but still need the buttons for the > trackstick. > > This changes existing behaviour, but TouchpadOff was always intended to stop > erroneous events while typing. Physical button presses are hard to trigger > accidentally. On the touchpads that TouchpadOff concept was originally > designed for the buttons are nowhere near the keyboard and are physically > separated from the touchpad anyway. On Clickpads, triggering a physical > click requires more force than accidentally touching the surface. > > https://bugs.freedesktop.org/show_bug.cgi?id=76156 > > Signed-off-by: Peter Hutterer <[email protected]>
Looks good. Reviewed-by: Hans de Goede <[email protected]> Regards, Hans > --- > man/synaptics.man | 7 ++++++- > src/synaptics.c | 17 +++++++---------- > 2 files changed, 13 insertions(+), 11 deletions(-) > > diff --git a/man/synaptics.man b/man/synaptics.man > index 97f0114..c1626c3 100644 > --- a/man/synaptics.man > +++ b/man/synaptics.man > @@ -261,9 +261,14 @@ Valid values are: > .TS > l l. > 0 Touchpad is enabled > -1 Touchpad is switched off > +1 Touchpad is switched off (physical clicks still work) > 2 Only tapping and scrolling is switched off > .TE > +When the touchpad is switched off, button events caused by a physical > +button press are still interpreted. On a ClickPad, this includes > +software-emulated middle and right buttons as defined by > +the SoftButtonAreas setting. > +.TP > Property: "Synaptics Off" > .TP > .BI "Option \*qLockedDrags\*q \*q" boolean \*q > diff --git a/src/synaptics.c b/src/synaptics.c > index aeb1c57..07fd450 100644 > --- a/src/synaptics.c > +++ b/src/synaptics.c > @@ -1934,7 +1934,8 @@ HandleTapProcessing(SynapticsPrivate * priv, struct > SynapticsHwState *hw, > enum EdgeType edge; > int delay = 1000000000; > > - if (priv->finger_state == FS_BLOCKED) > + if (para->touchpad_off == TOUCHPAD_OFF || > + priv->finger_state == FS_BLOCKED) > return delay; > > touch = finger >= FS_TOUCHED && priv->finger_state == FS_UNTOUCHED; > @@ -2349,7 +2350,9 @@ HandleScrolling(SynapticsPrivate * priv, struct > SynapticsHwState *hw, > SynapticsParameters *para = &priv->synpara; > int delay = 1000000000; > > - if ((priv->synpara.touchpad_off == TOUCHPAD_TAP_OFF) || > (priv->finger_state == FS_BLOCKED)) { > + if (priv->synpara.touchpad_off == TOUCHPAD_TAP_OFF || > + priv->synpara.touchpad_off == TOUCHPAD_OFF || > + priv->finger_state == FS_BLOCKED) { > stop_coasting(priv); > priv->circ_scroll_on = FALSE; > priv->vert_scroll_edge_on = FALSE; > @@ -3080,12 +3083,6 @@ HandleState(InputInfoPtr pInfo, struct > SynapticsHwState *hw, CARD32 now, > Bool using_cumulative_coords = FALSE; > Bool ignore_motion; > > - /* If touchpad is switched off, we skip the whole thing and return delay > */ > - if (para->touchpad_off == TOUCHPAD_OFF) { > - UpdateTouchState(pInfo, hw); > - return delay; > - } > - > /* We need both and x/y, the driver can't handle just one of the two > * yet. But since it's possible to hit a phys button on non-clickpads > * without ever getting motion data first, we must continue with 0/0 for > @@ -3124,8 +3121,8 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState > *hw, CARD32 now, > current_button_area(para, hw->x, hw->y) == NO_BUTTON_AREA) > priv->last_button_area = NO_BUTTON_AREA; > > - ignore_motion = > - !using_cumulative_coords && priv->last_button_area != NO_BUTTON_AREA; > + ignore_motion = para->touchpad_off == TOUCHPAD_OFF || > + (!using_cumulative_coords && priv->last_button_area != > NO_BUTTON_AREA); > > /* these two just update hw->left, right, etc. */ > update_hw_button_state(pInfo, hw, now, &delay); > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
