diff options
-rw-r--r-- | man/synaptics.man | 7 | ||||
-rw-r--r-- | src/synaptics.c | 17 |
2 files changed, 13 insertions, 11 deletions
diff --git a/man/synaptics.man b/man/synaptics.man index e42f647..2b8d1d9 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 618de6b..21bfb6b 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -1930,7 +1930,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; @@ -2348,7 +2349,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; @@ -3064,12 +3067,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 @@ -3108,8 +3105,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); |