[PATCH synaptics] Drop touch events from the driver
Hans de Goede
hdegoede at redhat.com
Wed Jun 17 01:00:39 PDT 2015
Hi,
On 17-06-15 05:14, Peter Hutterer wrote:
> 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 <peter.hutterer at who-t.net>
Looks good to me:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> 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;
> + if (!priv->has_touch)
> + return;
>
> - 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;
> - }
> + priv->num_slots =
> + priv->max_touches ? priv->max_touches : SYNAPTICS_MAX_TOUCHES;
>
> - /* 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 (!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;
> - }
> -
> - 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);
> }
>
>
More information about the xorg-devel
mailing list