xserver: Branch 'master' - 2 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 12 02:58:20 UTC 2018


 Xi/exevents.c |   21 ++++++++-------------
 dix/events.c  |    2 +-
 2 files changed, 9 insertions(+), 14 deletions(-)

New commits:
commit 2118e4471be037f2e642f35ff0494aa09177c9ee
Author: Marco Trevisan (Treviño) <mail at 3v1n0.net>
Date:   Sat Oct 27 03:54:09 2018 +0200

    dix/events: reuse grab pointer value

diff --git a/dix/events.c b/dix/events.c
index d3a33ea3f..b12d731dd 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1573,7 +1573,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
                emulate a ButtonRelease here. So pretend the listener
                already has the end event */
             if (grab->grabtype == CORE || grab->grabtype == XI ||
-                    !xi2mask_isset(mouse->deviceGrab.grab->xi2mask, mouse, XI_TouchBegin)) {
+                    !xi2mask_isset(grab->xi2mask, mouse, XI_TouchBegin)) {
                 mode = XIAcceptTouch;
                 /* NOTE: we set the state here, but
                  * ProcessTouchOwnershipEvent() will still call
commit 35e5a76cc1d02801fadd49d12e60664b02e4bebc
Author: Marco Trevisan (Treviño) <mail at 3v1n0.net>
Date:   Fri Oct 26 19:52:49 2018 +0200

    Xi: Use current device active grab to deliver touch events if any
    
    When Retrieving touch delivery data we need to check if we have an active
    grab on such device, and in that case use it to delivery events.
    If we don't do this, when rejecting the touch events in DeactivatePointerGrab,
    we will end-up in creating an implicit grab that will change the device
    deviceGrab's state, causing a recursion during TouchEndTouch.
    
    Fixes #7
    
    https://bugs.freedesktop.org/show_bug.cgi?id=96536

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 17d751e31..659816a46 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1293,14 +1293,21 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
     int rc;
     InputClients *iclients = NULL;
     *mask = NULL;
+    *grab = NULL;
 
     if (listener->type == LISTENER_GRAB ||
         listener->type == LISTENER_POINTER_GRAB) {
-
         *grab = listener->grab;
 
         BUG_RETURN_VAL(!*grab, FALSE);
+    }
+    else if (ti->emulate_pointer && dev->deviceGrab.grab &&
+             !dev->deviceGrab.fromPassiveGrab) {
+        /* There may be an active pointer grab on the device */
+        *grab = dev->deviceGrab.grab;
+    }
 
+    if (*grab) {
         *client = rClient(*grab);
         *win = (*grab)->window;
         *mask = (*grab)->xi2mask;
@@ -1357,8 +1364,6 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
             /* if owner selected, oclients is NULL */
             *client = oclients ? rClient(oclients) : wClient(*win);
         }
-
-        *grab = NULL;
     }
 
     return TRUE;
@@ -1498,16 +1503,6 @@ DeliverEmulatedMotionEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
                                        &mask))
             return;
 
-        /* There may be a pointer grab on the device */
-        if (!grab) {
-            grab = dev->deviceGrab.grab;
-            if (grab) {
-                win = grab->window;
-                mask = grab->xi2mask;
-                client = rClient(grab);
-            }
-        }
-
         DeliverTouchEmulatedEvent(dev, ti, (InternalEvent*)&motion, &ti->listeners[0], client,
                                   win, grab, mask);
     }


More information about the xorg-commit mailing list