Problem with touchscreen events and grabs
Thierry Reding
thierry.reding at avionic-design.de
Mon Oct 15 23:42:56 PDT 2012
On Tue, Oct 16, 2012 at 01:09:53PM +1000, Peter Hutterer wrote:
> On Fri, Oct 12, 2012 at 03:38:24PM +0200, Thierry Reding wrote:
> > Hi,
> >
> > I've been seeing a very strange issue. Originally this was observed when
> > using a browser with an onscreen keyboard. It would sometimes happen
> > that the keys on the keyboard would get stuck and be repeatedly sent.
> >
> > While trying to debug this, I came across a reliable way to reproduce it
> > using xwininfo. Basically I would run xwininfo and select the onscreen
> > keyboard. This would immediately result in the key being pressed and not
> > receiving a release event. Using other keys on the onscreen keyboard
> > would make them pressed as well, but never released either, resulting in
> > repeated keypresses received by the browser. It seems like X for some
> > reason believes that the press event is actually a release and vice-
> > versa.
> >
> > In order to find out what exactly was going on, I fired up xev with the
> > window XID as reported by xwininfo. This would indeed show the repeated
> > key events sent to the onscreen keyboard's window. Strangely enough, if
> > xev is started without an existing window XID, generating touch events
> > in that window seems to "fix" the issue. The keyboard can be used
> > reliably again.
> >
> > Furthermore, when running xwininfo and selecting the onscreen keyboard,
> > a second call to xwininfo would fail, saying it cannot grab the mouse.
> > This issue can be reliably reproduced independent of the onscreen
> > keyboard and works with any X window. So opening an xterm for instance,
> > then running xwininfo and selecting xterm will cause any subsequent
> > calls to xwininfo to fail. Running xev and generating touch events in
> > its window again fixes things.
> >
> > It seems like the X server doesn't properly release the grab and gets
> > the touch down and up events mixed up. Note that all of this only
> > happens when using a touchscreen device. Performing the same tests using
> > a regular USB mouse to select the X window for xwininfo doesn't show the
> > same behaviour.
> >
> > I'm using version 1.13 of the X server and xf86-input-evdev 2.7.3. Can
> > anybody else reproduce this?
> >
> > If you need any more information I'd be happy to provide it.
>
> Can you reproduce this with xinput -- test-xi2 and check what happens to the
> touch events? In particular the raw events.
Okay, since I can reliably reproduce this with the browser/on-screen-
keyboard setup, I fired up the browser, activated the OSK, run "xinput
test-xi2" in an SSH session and run xwininfo in another SSH session.
Once I press the 'D' key on the keyboard (which selects the OSK window
for xwininfo), the key gets stuck as I described before and the browser
location bar fills up with 'd's. Here is the output of xinput after the
keypress:
EVENT type 22 (RawTouchBegin)
device: 2 (8)
detail: 65
valuators:
0: 7664.00 (7664.00)
1: 26480.00 (26480.00)
EVENT type 23 (RawTouchUpdate)
device: 2 (8)
detail: 65
valuators:
0: 7664.00 (0.00)
1: 26512.00 (26512.00)
EVENT type 23 (RawTouchUpdate)
device: 2 (8)
detail: 65
valuators:
0: 7664.00 (0.00)
1: 26544.00 (26544.00)
EVENT type 23 (RawTouchUpdate)
device: 2 (8)
detail: 65
valuators:
0: 7664.00 (0.00)
1: 26592.00 (26592.00)
EVENT type 24 (RawTouchEnd)
device: 2 (8)
detail: 65
valuators:
0: 7664.00 (0.00)
1: 26592.00 (0.00)
EVENT type 13 (RawKeyPress)
device: 3 (5)
detail: 40
valuators:
So the RawKeyReleased event never seems to appear, which would explain
why the button press keeps being repeated. I then press the 'S' key,
which results in that key becoming stuck as well and the location bar
filling up with 's's. Again, here's the output from xinput:
EVENT type 22 (RawTouchBegin)
device: 2 (8)
detail: 66
valuators:
0: 4768.00 (4768.00)
1: 26448.00 (26448.00)
EVENT type 23 (RawTouchUpdate)
device: 2 (8)
detail: 66
valuators:
0: 4752.00 (4752.00)
1: 26480.00 (26480.00)
EVENT type 23 (RawTouchUpdate)
device: 2 (8)
detail: 66
valuators:
0: 4768.00 (4768.00)
1: 26512.00 (26512.00)
EVENT type 24 (RawTouchEnd)
device: 2 (8)
detail: 66
valuators:
0: 4768.00 (0.00)
1: 26512.00 (0.00)
EVENT type 14 (RawKeyRelease)
device: 3 (5)
detail: 40
valuators:
EVENT type 13 (RawKeyPress)
device: 3 (5)
detail: 39
valuators:
So touch events seem to be properly processed, but RawKeyRelease and
RawKeyPress seem to be inverted.
> Also try to compile your server with the dtrace hooks enabled and look at
> c0b0a9bce9237b0abe150c1a7b54939affecc751 for a example systemtap script.
> That should tell you what events the driver submits to the server.
It looks like dtrace might be hard to get to work. Oddly the X server
has the --with-dtrace option, but the commit you pointed to mentions
systemtap. From the looks of it, systemtap is the Linux implementation
of dtrace, is that correct? Since this is a cross-compilation setup
things might get a little hairy to setup properly. Though I'd first have
to convince the X server to accept systemtap as dtrace replacement. Or
won't that work?
> But on the whole, this issue looks convoluted enough that you may have to
> write a little test application to reliably reproduce this.
I can reliably reproduce this alright. If it helps I can look into
providing a standalone version of the OSK.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20121016/c70609a9/attachment.pgp>
More information about the xorg-devel
mailing list