linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Hutterer <peter.hutterer@who-t.net>
To: Yufeng Shen <miletus@chromium.org>
Cc: linux-input@vger.kernel.org, Henrik Rydberg <rydberg@euromail.se>,
	Daniel Kurtz <djkurtz@chromium.org>,
	rbyers@chromium.org
Subject: Re: [RFC] input: mt: Support for touch cancel
Date: Tue, 12 Mar 2013 11:36:05 +1000	[thread overview]
Message-ID: <20130312013605.GA31587@yabbi.redhat.com> (raw)
In-Reply-To: <CAPDwgkMbwTtf2a5Xuvb3_B18FBJ7w6VJx1CJN=gGwaaRSKzDbA@mail.gmail.com>

On Mon, Mar 11, 2013 at 04:34:27PM -0400, Yufeng Shen wrote:
> I have ran into cases where I want to make a touch end event to have a
> touch cancel indication.
> 
> This comes from trying to solve the problem of :
> 
> If the touch sequence happens before the system suspends, and the touch
> release event is
> never received after the system resumes, userspace MT state tracking could
> be in a bad state.
> 
> ( see #5 from
> https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug/968845
> for an example of how this could happen from lid close/open on MBA)

ftr, this a bug in the driver and should be fixed now.
 
> One possible workaround is to let the touch device driver to release all
> existing touches on
> resume, which has the effect of clearing all the MT states in userspace
> touch stacks.
> But the touch release/end event often will result in some gesture being
> recognized and performed,
> like a tap-to-click being generated.
> 
> So I am wondering what's the best way to solve the problem of clearing the
> touch states with
> minimal side effect. One way I can think of is to have MTB protocol add
> support of
> a touch cancel indication on touch release, e.g. making TRACKING_ID = -2
> meaning that
> the touch release is synthesized from the system and really has the meaning
> of releasing and canceling the current touch, while TRACKING_ID = -1
> meaning that the touch release is reported back from the device.
> 
> And from Xf86-input driver level, we can add a corresponding TouchCancel
> for this.

I can handle touch-cancel events in the synaptics driver to avoid
tap-to-click but further details get a bit nasty.

To actually add TouchCancel to the client-protocol means a new XI protocol
revision, plus the stuff in the server _and_ the stuff in the client. that
is quite some lag time here, and if a client cannot handle TouchCancel all
we can do is do a TouchEnd - which will still trigger the gesture.

even if you update the touch clients you're still lacking any solution for
pointer-emulated clients. again, here we can only do a ButtonRelease event
which again will trigger whatever it did.

All the above can be implemented though. In fact, I suspect the protocol
part is the easy bit (just a flag on TouchEnd) but the server part is
reasonably nasty.

the real counter-argument is that I think it is a partial solution only.
>From an X perspective touches also end when you vt-switch away from the
server (device is disabled). but the kernel won't cancel the touch event for
that. Or when the device is disabled by the client ("disable touchpad while
typing" feature), So we'd have to maintain both implicit cancel and explicit
cancel in the driver anyway.

so yeah, I don't think adding this to the kernel would provide any
significant benefit since we still need to handle all the other cases
anyway.

Cheers,
   Peter

       reply	other threads:[~2013-03-12  1:54 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAPDwgkMbwTtf2a5Xuvb3_B18FBJ7w6VJx1CJN=gGwaaRSKzDbA@mail.gmail.com>
2013-03-12  1:36 ` Peter Hutterer [this message]
2013-03-12  8:59   ` [RFC] input: mt: Support for touch cancel Benjamin Tissoires
2013-03-12 18:18     ` Yufeng Shen
2013-03-12 19:15       ` Benjamin Tissoires
2013-03-12 18:10   ` Yufeng Shen
2013-03-13  0:54     ` Peter Hutterer
     [not found]       ` <CAPDwgkO5LUUkVQiUWyoC+mSeN+fXDPV2yV-2Qt6aqQ=eh-bwpg@mail.gmail.com>
2013-03-13 23:43         ` Peter Hutterer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130312013605.GA31587@yabbi.redhat.com \
    --to=peter.hutterer@who-t.net \
    --cc=djkurtz@chromium.org \
    --cc=linux-input@vger.kernel.org \
    --cc=miletus@chromium.org \
    --cc=rbyers@chromium.org \
    --cc=rydberg@euromail.se \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).