From 0a4cf80a00663ff3ce8e76baf0940782576efe13 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 26 Mar 2015 16:28:56 +1000 Subject: Drop touch events from the driver This was a bad idea. No-one seems to use this and it gives us little benefits. To even get this feature a number of other features need to be turned off (like two-finger scrolling and tapping). Many of these are enabled by default, if they are disabled a client stack with full touchpad gesture support could in theory support true touchpad gestures. This has never happened. Drop the touch events from the synaptics driver. This allows us to switch the touchpad fully over to look like a relative device, thus also removing the bug that changes the touchpad speed whenever a monitor is added/removed in. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/synaptics.c | 113 +++++--------------------------------------------------- 1 file changed, 10 insertions(+), 103 deletions(-) diff --git a/src/synaptics.c b/src/synaptics.c index 955b042..550b31c 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -1190,49 +1190,19 @@ DeviceInitTouch(DeviceIntPtr dev, Atom *axes_labels) { InputInfoPtr pInfo = dev->public.devicePrivate; SynapticsPrivate *priv = (SynapticsPrivate *) (pInfo->private); - int i; - - if (priv->has_touch) { - priv->num_slots = - priv->max_touches ? priv->max_touches : SYNAPTICS_MAX_TOUCHES; - - priv->open_slots = malloc(priv->num_slots * sizeof(int)); - if (!priv->open_slots) { - xf86IDrvMsg(pInfo, X_ERROR, - "failed to allocate open touch slots array\n"); - priv->has_touch = 0; - priv->num_slots = 0; - return; - } - - /* x/y + whatever other MT axes we found */ - if (!InitTouchClassDeviceStruct(dev, priv->max_touches, - XIDependentTouch, - 2 + priv->num_mt_axes)) { - xf86IDrvMsg(pInfo, X_ERROR, - "failed to initialize touch class device\n"); - priv->has_touch = 0; - priv->num_slots = 0; - free(priv->open_slots); - priv->open_slots = NULL; - return; - } - for (i = 0; i < priv->num_mt_axes; i++) { - SynapticsTouchAxisRec *axis = &priv->touch_axes[i]; - int axnum = 4 + i; /* Skip x, y, and scroll axes */ + if (!priv->has_touch) + return; - if (!xf86InitValuatorAxisStruct(dev, axnum, axes_labels[axnum], - axis->min, axis->max, axis->res, 0, - axis->res, Absolute)) { - xf86IDrvMsg(pInfo, X_WARNING, - "failed to initialize axis %s, skipping\n", - axis->label); - continue; - } + priv->num_slots = + priv->max_touches ? priv->max_touches : SYNAPTICS_MAX_TOUCHES; - xf86InitValuatorDefaults(dev, axnum); - } + priv->open_slots = malloc(priv->num_slots * sizeof(int)); + if (!priv->open_slots) { + xf86IDrvMsg(pInfo, X_ERROR, + "failed to allocate open touch slots array\n"); + priv->has_touch = 0; + priv->num_slots = 0; } } @@ -3009,18 +2979,9 @@ static void HandleTouches(InputInfoPtr pInfo, struct SynapticsHwState *hw) { SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private; - SynapticsParameters *para = &priv->synpara; int new_active_touches = priv->num_active_touches; - int min_touches = 2; - Bool restart_touches = FALSE; int i; - if (para->click_action[F3_CLICK1] || para->tap_action[F3_TAP]) - min_touches = 4; - else if (para->click_action[F2_CLICK1] || para->tap_action[F2_TAP] || - para->scroll_twofinger_vert || para->scroll_twofinger_horiz) - min_touches = 3; - /* Count new number of active touches */ for (i = 0; i < hw->num_mt_mask; i++) { if (hw->slot_state[i] == SLOTSTATE_OPEN) @@ -3029,60 +2990,6 @@ HandleTouches(InputInfoPtr pInfo, struct SynapticsHwState *hw) new_active_touches--; } - if (priv->has_semi_mt) - goto out; - - if (priv->num_active_touches < min_touches && - new_active_touches < min_touches) { - /* We stayed below number of touches needed to send events */ - goto out; - } - else if (priv->num_active_touches >= min_touches && - new_active_touches < min_touches) { - /* We are transitioning to less than the number of touches needed to - * send events. End all currently open touches. */ - for (i = 0; i < priv->num_active_touches; i++) { - int slot = priv->open_slots[i]; - - xf86PostTouchEvent(pInfo->dev, slot, XI_TouchEnd, 0, - hw->mt_mask[slot]); - } - - /* Don't send any more events */ - goto out; - } - else if (priv->num_active_touches < min_touches && - new_active_touches >= min_touches) { - /* We are transitioning to more than the number of touches needed to - * send events. Begin all already open touches. */ - restart_touches = TRUE; - for (i = 0; i < priv->num_active_touches; i++) { - int slot = priv->open_slots[i]; - - xf86PostTouchEvent(pInfo->dev, slot, XI_TouchBegin, 0, - hw->mt_mask[slot]); - } - } - - /* Send touch begin events for all new touches */ - for (i = 0; i < hw->num_mt_mask; i++) - if (hw->slot_state[i] == SLOTSTATE_OPEN) - xf86PostTouchEvent(pInfo->dev, i, XI_TouchBegin, 0, hw->mt_mask[i]); - - /* Send touch update/end events for all the rest */ - for (i = 0; i < priv->num_active_touches; i++) { - int slot = priv->open_slots[i]; - - /* Don't send update event if we just reopened the touch above */ - if (hw->slot_state[slot] == SLOTSTATE_UPDATE && !restart_touches) - xf86PostTouchEvent(pInfo->dev, slot, XI_TouchUpdate, 0, - hw->mt_mask[slot]); - else if (hw->slot_state[slot] == SLOTSTATE_CLOSE) - xf86PostTouchEvent(pInfo->dev, slot, XI_TouchEnd, 0, - hw->mt_mask[slot]); - } - - out: UpdateTouchState(pInfo, hw); } -- cgit v1.2.3