Good evening,

We have stumbled across what seems like an inconsistency on how button release events are delivered when xinput2 is used instead of xkb.

We saw the issue on some flash content under Firefox. When touching the screen the ButtonRelease would never be sent to Firefox (observed with xtrace). In that case, it was observed with at multi-touch touchscreen and the events would be touch events (RawTouchBegin, RawTouchEnd).

The same flash content would work just fine on a simple touchscreen that would report simple ButtonPress and ButtonRelease. When launching Firefox under xtrace and following the execution with GDB, we would observed the following on the functional touch screen:

A XUngrabPointer from Firefox
The ButtonRelease sent to Firefox.

With xinput2, the ButtonRelease was never sent to Firefox. It was always "eaten" in xevents because "the grab was not the active". This is where the behavior is inconsistent.

We applied the following patch:

diff -Naur xorg-server-1.15.1_original/Xi/exevents.c xorg-server-1.15.1_new/Xi/exevents.c --- xorg-server-1.15.1_original/Xi/exevents.c 2015-01-13 19:00:39.698254270 -0500
+++ xorg-server-1.15.1_new/Xi/exevents.c        2015-01-13 18:58:18.722763486 
-0500
@@ -1393,9 +1393,12 @@
             int deliveries = 0;

             /* 'grab' is the passive grab, but if the grab isn't active,
-             * * don't deliver */
-           if (!dev->deviceGrab.grab)
-                   return !Success;
+             * deliver to the window under the pointer */
+            if (!dev->deviceGrab.grab) {
+                DeliverDeviceEvents(GetSpriteWindow(dev), ptrev,
+                                    NullGrab, NullWindow, dev);
+                return Success;
+            }

             if (grab->ownerEvents) {
                 WindowPtr focus = NullWindow;



Finally, what stumped us for a while was the behavior under a clean Ubuntu 14.04 installation. The ButtonRelease was received by Firefox. For some reason, with compiz, the timestamp for the XUngrabPointer is invalid and that gets discarded and the ButtonRelease is delivered in that case. Using Icewm under Ubuntu 14.04 left us with the same behavior where the ButtonRelease was not delivered....

Any feedback is appreciated.

Best regards,


--
Philippe-A. Lemelin
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to