[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 debian/changelog               |    7 +
 debian/patches/500_xi2.1.patch |  145 ++++++++++++++++++++++++++++++++++-------
 2 files changed, 129 insertions(+), 23 deletions(-)

New commits:
commit 40020b808fa2c02cb4d34cdb4e8738bd6c535f8b
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Mar 7 14:28:51 2011 -0500

    Prevent pointer motion when more than one touch on touchpad. (LP: #730881)

diff --git a/debian/changelog b/debian/changelog
index 8b6920e..d117a18 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,8 +6,9 @@ xorg-server (2:1.9.99.902-2ubuntu2) UNRELEASED; urgency=low
   * Check slave device touch selection mask during implicit grab. (LP: #725241)
   * Cancel slave touch selections when attached to master device. (LP: #723904)
   * Check for touch selections only when there are active clients. (LP: #723900)
+  * Prevent pointer motion when more than one touch on touchpad.
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 04 Mar 2011 14:18:45 -0500
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 07 Mar 2011 14:28:02 -0500
 
 xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
 
diff --git a/debian/patches/500_xi2.1.patch b/debian/patches/500_xi2.1.patch
index 0391ab6..2b22e6f 100644
--- a/debian/patches/500_xi2.1.patch
+++ b/debian/patches/500_xi2.1.patch
@@ -3107,7 +3107,19 @@
  }
  
  /**
-@@ -1165,7 +1170,16 @@ GetPointerEvents(EventList *events, Devi
+@@ -1116,7 +1121,10 @@ GetPointerEvents(EventList *events, Devi
+     switch (type)
+     {
+         case MotionNotify:
+-            if (!mask_in || valuator_mask_num_valuators(mask_in) <= 0)
++            if (!mask_in || valuator_mask_num_valuators(mask_in) <= 0 ||
++                (pDev->touch && pDev->touch->active_touches > 1 &&
++                 (pDev->touch->mode == XIDependentTouch ||
++                  pDev->touch->mode == XISemiMultitouch)))
+                 return 0;
+             break;
+         case ButtonPress:
+@@ -1165,7 +1173,16 @@ GetPointerEvents(EventList *events, Devi
              }
          }
  
@@ -3125,7 +3137,7 @@
          moveAbsolute(pDev, &x, &y, &mask);
      } else {
          if (flags & POINTER_ACCELERATE) {
-@@ -1286,6 +1300,130 @@ GetProximityEvents(EventList *events, De
+@@ -1286,6 +1303,130 @@ GetProximityEvents(EventList *events, De
      return num_events;
  }
  

commit 2ea1b7de089075fe3281bbb9251e7d02deffaae0
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 4 14:19:52 2011 -0500

    Check for touch selections only when there are active clients. (LP: #723900)

diff --git a/debian/changelog b/debian/changelog
index ccf5ea3..8b6920e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,8 +5,9 @@ xorg-server (2:1.9.99.902-2ubuntu2) UNRELEASED; urgency=low
   * Cancel touch clients if emulated button press is delivered. (LP: #725191)
   * Check slave device touch selection mask during implicit grab. (LP: #725241)
   * Cancel slave touch selections when attached to master device. (LP: #723904)
+  * Check for touch selections only when there are active clients. (LP: #723900)
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 04 Mar 2011 11:36:19 -0500
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 04 Mar 2011 14:18:45 -0500
 
 xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
 
diff --git a/debian/patches/500_xi2.1.patch b/debian/patches/500_xi2.1.patch
index ecc640f..0391ab6 100644
--- a/debian/patches/500_xi2.1.patch
+++ b/debian/patches/500_xi2.1.patch
@@ -2415,7 +2415,7 @@
              return;
  
          event->root = RootWindow(pSprite)->drawable.id;
-@@ -2369,12 +2490,115 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2369,12 +2490,119 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
      xEvent core;
      xEvent *xE = NULL;
      int rc, mask, count = 0;
@@ -2427,7 +2427,9 @@
 +    /* If we are replaying a pointer emulated button press event, find the first
 +     * pointer or touch selecting client. */
 +    if (syncEvents.playingEvents && event->any.type == ET_ButtonPress &&
-+        (event->device_event.flags & XIPointerEmulated))
++        (event->device_event.flags & XIPointerEmulated) &&
++        event->device_event.touchpoint &&
++        event->device_event.touchpoint->active_clients > 0)
 +    {
 +        QdEventPtr qe;
 +        DeviceEvent *te;
@@ -2499,7 +2501,9 @@
 +        }
 +    }
 +    else if (IsPointerEvent(event) && !syncEvents.playingEvents &&
-+             (event->device_event.flags & XIPointerEmulated))
++             (event->device_event.flags & XIPointerEmulated) &&
++             event->device_event.touchpoint &&
++             event->device_event.touchpoint->active_clients > 0)
 +    {
 +        /* Non-grabbed emulated pointer event, so check for touch selections. */
 +        check_touch = TRUE;
@@ -2532,7 +2536,7 @@
          {
              /* XI2 events first */
              if (mask & XI2_MASK)
-@@ -2383,10 +2607,25 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2383,10 +2611,25 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
                  rc = EventToXI2(event, &xi2);
                  if (rc == Success)
                  {
@@ -2560,7 +2564,7 @@
                                                         filter, grab);
                      free(xi2);
                      if (deliveries > 0)
-@@ -2439,6 +2678,14 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2439,6 +2682,14 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
                  goto unwind;
              }
          }
@@ -2575,7 +2579,7 @@
  
          child = pWin->drawable.id;
          pWin = pWin->parent;
-@@ -2591,7 +2838,7 @@ XYToWindow(SpritePtr pSprite, int x, int
+@@ -2591,7 +2842,7 @@ XYToWindow(SpritePtr pSprite, int x, int
  	else
  	    pWin = pWin->nextSib;
      }
@@ -2584,7 +2588,7 @@
  }
  
  /**
-@@ -2629,7 +2876,8 @@ ActivateFocusInGrab(DeviceIntPtr dev, Wi
+@@ -2629,7 +2880,8 @@ ActivateFocusInGrab(DeviceIntPtr dev, Wi
      event.deviceid = dev->id;
      event.sourceid = dev->id;
      event.detail.button = 0;
@@ -2594,7 +2598,7 @@
      if (rc)
          DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveUngrab);
      return rc;
-@@ -2666,7 +2914,8 @@ ActivateEnterGrab(DeviceIntPtr dev, Wind
+@@ -2666,7 +2918,8 @@ ActivateEnterGrab(DeviceIntPtr dev, Wind
      event.deviceid = dev->id;
      event.sourceid = dev->id;
      event.detail.button = 0;
@@ -2604,7 +2608,7 @@
      if (rc)
          DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveGrab);
      return rc;
-@@ -3353,7 +3602,7 @@ GrabPtr
+@@ -3353,7 +3606,7 @@ GrabPtr
  CheckPassiveGrabsOnWindow(
      WindowPtr pWin,
      DeviceIntPtr device,
@@ -2613,7 +2617,7 @@
      BOOL checkCore,
      BOOL activate)
  {
-@@ -3370,9 +3619,22 @@ CheckPassiveGrabsOnWindow(
+@@ -3370,9 +3623,22 @@ CheckPassiveGrabsOnWindow(
  	return NULL;
      /* Fill out the grab details, but leave the type for later before
       * comparing */
@@ -2637,7 +2641,7 @@
      tempGrab.detail.pMask = NULL;
      tempGrab.modifiersDetail.pMask = NULL;
      tempGrab.next = NULL;
-@@ -3380,6 +3642,9 @@ CheckPassiveGrabsOnWindow(
+@@ -3380,6 +3646,9 @@ CheckPassiveGrabsOnWindow(
      {
  	DeviceIntPtr	gdev;
  	XkbSrvInfoPtr	xkbi = NULL;
@@ -2647,7 +2651,7 @@
  
  	gdev= grab->modifierDevice;
          if (grab->grabtype == GRABTYPE_CORE)
-@@ -3405,16 +3670,15 @@ CheckPassiveGrabsOnWindow(
+@@ -3405,16 +3674,15 @@ CheckPassiveGrabsOnWindow(
          tempGrab.modifiersDetail.exact = xkbi ? xkbi->state.grab_mods : 0;
  
          /* Check for XI2 and XI grabs first */
@@ -2666,7 +2670,7 @@
                  (GrabMatchesSecond(&tempGrab, grab, FALSE)))
                  match = XI_MATCH;
          }
-@@ -3423,125 +3687,143 @@ CheckPassiveGrabsOnWindow(
+@@ -3423,125 +3691,143 @@ CheckPassiveGrabsOnWindow(
          if (!match && checkCore)
          {
              tempGrab.grabtype = GRABTYPE_CORE;
@@ -2907,7 +2911,7 @@
      }
      return NULL;
  #undef CORE_MATCH
-@@ -3580,8 +3862,13 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3580,8 +3866,13 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  {
      int i;
      WindowPtr pWin = NULL;
@@ -2922,7 +2926,7 @@
  
      if (event->type != ET_ButtonPress &&
          event->type != ET_KeyPress)
-@@ -3609,7 +3896,8 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3609,7 +3900,8 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  	for (; i < focus->traceGood; i++)
  	{
  	    pWin = focus->trace[i];
@@ -2932,7 +2936,7 @@
  		return TRUE;
  	}
  
-@@ -3619,11 +3907,54 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3619,11 +3911,54 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  	    return FALSE;
      }
  
@@ -2990,7 +2994,7 @@
      }
  
      return FALSE;
-@@ -3745,6 +4076,17 @@ DeliverGrabbedEvent(InternalEvent *event
+@@ -3745,6 +4080,17 @@ DeliverGrabbedEvent(InternalEvent *event
      grabinfo = &thisDev->deviceGrab;
      grab = grabinfo->grab;
  
@@ -3008,7 +3012,7 @@
      if (grab->ownerEvents)
      {
  	WindowPtr focus;
-@@ -3821,6 +4163,9 @@ DeliverGrabbedEvent(InternalEvent *event
+@@ -3821,6 +4167,9 @@ DeliverGrabbedEvent(InternalEvent *event
                  mask = grab->xi2mask[XIAllDevices][evtype/8] |
                      grab->xi2mask[XIAllMasterDevices][evtype/8] |
                      grab->xi2mask[thisDev->id][evtype/8];
@@ -3018,7 +3022,7 @@
                  /* try XI2 event */
                  FixUpEventFromWindow(pSprite, xi2, grab->window, None, TRUE);
                  /* XXX: XACE */
-@@ -4955,7 +5300,7 @@ InitEvents(void)
+@@ -4955,7 +5304,7 @@ InitEvents(void)
  	free(syncEvents.pending);
  	syncEvents.pending = next;
      }

commit 2c05aef93c79f1eec6e8519b2ce973b5a694ccd3
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 4 14:13:19 2011 -0500

    Cancel slave touch selections when attached to master device. (LP: #723904)

diff --git a/debian/changelog b/debian/changelog
index 5db48f5..ccf5ea3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,8 +4,9 @@ xorg-server (2:1.9.99.902-2ubuntu2) UNRELEASED; urgency=low
     upstream since 1.6.1.901.
   * Cancel touch clients if emulated button press is delivered. (LP: #725191)
   * Check slave device touch selection mask during implicit grab. (LP: #725241)
+  * Cancel slave touch selections when attached to master device. (LP: #723904)
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 28 Feb 2011 12:30:07 -0500
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 04 Mar 2011 11:36:19 -0500
 
 xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
 
diff --git a/debian/patches/500_xi2.1.patch b/debian/patches/500_xi2.1.patch
index b54a574..ecc640f 100644
--- a/debian/patches/500_xi2.1.patch
+++ b/debian/patches/500_xi2.1.patch
@@ -2007,6 +2007,78 @@
  /*
   * Check if the given buffer contains elements between low (inclusive) and
   * high (inclusive) only.
+@@ -2375,6 +2535,58 @@ RecalculateMasterButtons(DeviceIntPtr sl
+     }
+ }
+ 
++static void
++DropTouchSelectionsOnWindow(DeviceIntPtr dev, WindowPtr win)
++{
++    WindowPtr child;
++
++    if (wOtherInputMasks(win) &&
++        BitIsOn(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchBegin))
++    {
++        InputClientsPtr client = wOtherInputMasks(win)->inputClients;
++
++        /* Don't bother deleting client record if there are no other
++         * selections. The client will likely reselect when it gets the
++         * HierarchyChange event. */
++        while (client)
++        {
++            ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchBegin);
++            ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchEnd);
++            ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchOwnership);
++            ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchUpdate);
++            ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchUpdateUnowned);
++
++            client = client->next;
++        }
++
++        ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchBegin);
++        ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchEnd);
++        ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchOwnership);
++        ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchUpdate);
++        ClearBit(wOtherInputMasks(win)->xi2mask[dev->id], XI_TouchUpdateUnowned);
++    }
++
++    child = win->firstChild;
++    while (child)
++    {
++        DropTouchSelectionsOnWindow(dev, child);
++        child = child->nextSib;
++    }
++}
++
++static void
++DropTouchSelections(DeviceIntPtr dev)
++{
++    int i;
++
++    for (i = 0; i < screenInfo.numScreens; i++)
++    {
++        WindowPtr win = screenInfo.screens[i]->root;
++
++        DropTouchSelectionsOnWindow(dev, win);
++    }
++}
++
+ /**
+  * Attach device 'dev' to device 'master'.
+  * Client is set to the client that issued the request, or NULL if it comes
+@@ -2440,6 +2652,12 @@ AttachDevice(ClientPtr client, DeviceInt
+         dev->spriteInfo->spriteOwner = FALSE;
+ 
+         RecalculateMasterButtons(master);
++
++        /* Only one client may select for touch events from a device on a window
++         * at any time. Reattaching could break this, so drop all touch event
++         * selections for this specific slave device on all windows. */
++        if (dev->touch)
++            DropTouchSelections(dev);
+     }
+ 
+     /* XXX: in theory, the MD should change back to its old, original
 --- a/dix/eventconvert.c
 +++ b/dix/eventconvert.c
 @@ -55,6 +55,7 @@ static int eventToKeyButtonPointer(Devic

commit d9521df32c0870afd8a8a3f60857b74ac5e4f565
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Feb 28 12:31:17 2011 -0500

    Check slave device touch selection mask during implicit grab. (LP: #725241)

diff --git a/debian/changelog b/debian/changelog
index 881acaa..5db48f5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,8 +3,9 @@ xorg-server (2:1.9.99.902-2ubuntu2) UNRELEASED; urgency=low
   * Remove 169_mipointer_nullptr_checks.patch, fixed in another way
     upstream since 1.6.1.901.
   * Cancel touch clients if emulated button press is delivered. (LP: #725191)
+  * Check slave device touch selection mask during implicit grab. (LP: #725241)
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 28 Feb 2011 12:27:37 -0500
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 28 Feb 2011 12:30:07 -0500
 
 xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
 
diff --git a/debian/patches/500_xi2.1.patch b/debian/patches/500_xi2.1.patch
index 06a26fa..b54a574 100644
--- a/debian/patches/500_xi2.1.patch
+++ b/debian/patches/500_xi2.1.patch
@@ -2936,7 +2936,17 @@
      if (grab->ownerEvents)
      {
  	WindowPtr focus;
-@@ -4955,7 +5297,7 @@ InitEvents(void)
+@@ -3821,6 +4163,9 @@ DeliverGrabbedEvent(InternalEvent *event
+                 mask = grab->xi2mask[XIAllDevices][evtype/8] |
+                     grab->xi2mask[XIAllMasterDevices][evtype/8] |
+                     grab->xi2mask[thisDev->id][evtype/8];
++                if (IsTouchEvent(event))
++                    mask |=
++                        grab->xi2mask[event->device_event.sourceid][evtype/8];
+                 /* try XI2 event */
+                 FixUpEventFromWindow(pSprite, xi2, grab->window, None, TRUE);
+                 /* XXX: XACE */
+@@ -4955,7 +5300,7 @@ InitEvents(void)
  	free(syncEvents.pending);
  	syncEvents.pending = next;
      }

commit a57f9082e4268e0ca0ba68459ddc2c5d7bf9b235
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Feb 28 12:29:30 2011 -0500

    Cancel touch clients if emulated button press is delivered. (LP: #725191)

diff --git a/debian/changelog b/debian/changelog
index 85d1d3a..881acaa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,8 +2,9 @@ xorg-server (2:1.9.99.902-2ubuntu2) UNRELEASED; urgency=low
 
   * Remove 169_mipointer_nullptr_checks.patch, fixed in another way
     upstream since 1.6.1.901.
+  * Cancel touch clients if emulated button press is delivered. (LP: #725191)
 
- -- Timo Aaltonen <tjaalton@ubuntu.com>  Fri, 25 Feb 2011 13:17:15 +0200
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 28 Feb 2011 12:27:37 -0500
 
 xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
 
diff --git a/debian/patches/500_xi2.1.patch b/debian/patches/500_xi2.1.patch
index bca9ac3..06a26fa 100644
--- a/debian/patches/500_xi2.1.patch
+++ b/debian/patches/500_xi2.1.patch
@@ -2343,7 +2343,7 @@
              return;
  
          event->root = RootWindow(pSprite)->drawable.id;
-@@ -2369,12 +2490,112 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2369,12 +2490,115 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
      xEvent core;
      xEvent *xE = NULL;
      int rc, mask, count = 0;
@@ -2413,9 +2413,12 @@
 +                    ti->emulate_pointer = FALSE;
 +                    if (IsPointerEvent(event))
 +                        return 0;
++                } else {
++                    ti->owner = -1;
++                    ti->active_clients = 0;
++                    if (IsTouchEvent(event))
++                        return 0;
 +                }
-+                else if (IsTouchEvent(event))
-+                    return 0;
 +
 +                break;
 +            }
@@ -2457,7 +2460,7 @@
          {
              /* XI2 events first */
              if (mask & XI2_MASK)
-@@ -2383,10 +2604,25 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2383,10 +2607,25 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
                  rc = EventToXI2(event, &xi2);
                  if (rc == Success)
                  {
@@ -2485,7 +2488,7 @@
                                                         filter, grab);
                      free(xi2);
                      if (deliveries > 0)
-@@ -2439,6 +2675,14 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
+@@ -2439,6 +2678,14 @@ DeliverDeviceEvents(WindowPtr pWin, Inte
                  goto unwind;
              }
          }
@@ -2500,7 +2503,7 @@
  
          child = pWin->drawable.id;
          pWin = pWin->parent;
-@@ -2591,7 +2835,7 @@ XYToWindow(SpritePtr pSprite, int x, int
+@@ -2591,7 +2838,7 @@ XYToWindow(SpritePtr pSprite, int x, int
  	else
  	    pWin = pWin->nextSib;
      }
@@ -2509,7 +2512,7 @@
  }
  
  /**
-@@ -2629,7 +2873,8 @@ ActivateFocusInGrab(DeviceIntPtr dev, Wi
+@@ -2629,7 +2876,8 @@ ActivateFocusInGrab(DeviceIntPtr dev, Wi
      event.deviceid = dev->id;
      event.sourceid = dev->id;
      event.detail.button = 0;
@@ -2519,7 +2522,7 @@
      if (rc)
          DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveUngrab);
      return rc;
-@@ -2666,7 +2911,8 @@ ActivateEnterGrab(DeviceIntPtr dev, Wind
+@@ -2666,7 +2914,8 @@ ActivateEnterGrab(DeviceIntPtr dev, Wind
      event.deviceid = dev->id;
      event.sourceid = dev->id;
      event.detail.button = 0;
@@ -2529,7 +2532,7 @@
      if (rc)
          DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveGrab);
      return rc;
-@@ -3353,7 +3599,7 @@ GrabPtr
+@@ -3353,7 +3602,7 @@ GrabPtr
  CheckPassiveGrabsOnWindow(
      WindowPtr pWin,
      DeviceIntPtr device,
@@ -2538,7 +2541,7 @@
      BOOL checkCore,
      BOOL activate)
  {
-@@ -3370,9 +3616,22 @@ CheckPassiveGrabsOnWindow(
+@@ -3370,9 +3619,22 @@ CheckPassiveGrabsOnWindow(
  	return NULL;
      /* Fill out the grab details, but leave the type for later before
       * comparing */
@@ -2562,7 +2565,7 @@
      tempGrab.detail.pMask = NULL;
      tempGrab.modifiersDetail.pMask = NULL;
      tempGrab.next = NULL;
-@@ -3380,6 +3639,9 @@ CheckPassiveGrabsOnWindow(
+@@ -3380,6 +3642,9 @@ CheckPassiveGrabsOnWindow(
      {
  	DeviceIntPtr	gdev;
  	XkbSrvInfoPtr	xkbi = NULL;
@@ -2572,7 +2575,7 @@
  
  	gdev= grab->modifierDevice;
          if (grab->grabtype == GRABTYPE_CORE)
-@@ -3405,16 +3667,15 @@ CheckPassiveGrabsOnWindow(
+@@ -3405,16 +3670,15 @@ CheckPassiveGrabsOnWindow(
          tempGrab.modifiersDetail.exact = xkbi ? xkbi->state.grab_mods : 0;
  
          /* Check for XI2 and XI grabs first */
@@ -2591,7 +2594,7 @@
                  (GrabMatchesSecond(&tempGrab, grab, FALSE)))
                  match = XI_MATCH;
          }
-@@ -3423,125 +3684,143 @@ CheckPassiveGrabsOnWindow(
+@@ -3423,125 +3687,143 @@ CheckPassiveGrabsOnWindow(
          if (!match && checkCore)
          {
              tempGrab.grabtype = GRABTYPE_CORE;
@@ -2832,7 +2835,7 @@
      }
      return NULL;
  #undef CORE_MATCH
-@@ -3580,8 +3859,13 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3580,8 +3862,13 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  {
      int i;
      WindowPtr pWin = NULL;
@@ -2847,7 +2850,7 @@
  
      if (event->type != ET_ButtonPress &&
          event->type != ET_KeyPress)
-@@ -3609,7 +3893,8 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3609,7 +3896,8 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  	for (; i < focus->traceGood; i++)
  	{
  	    pWin = focus->trace[i];
@@ -2857,7 +2860,7 @@
  		return TRUE;
  	}
  
-@@ -3619,11 +3904,54 @@ CheckDeviceGrabs(DeviceIntPtr device, De
+@@ -3619,11 +3907,54 @@ CheckDeviceGrabs(DeviceIntPtr device, De
  	    return FALSE;
      }
  
@@ -2915,7 +2918,7 @@
      }
  
      return FALSE;
-@@ -3745,6 +4073,17 @@ DeliverGrabbedEvent(InternalEvent *event
+@@ -3745,6 +4076,17 @@ DeliverGrabbedEvent(InternalEvent *event
      grabinfo = &thisDev->deviceGrab;
      grab = grabinfo->grab;
  
@@ -2933,7 +2936,7 @@
      if (grab->ownerEvents)
      {
  	WindowPtr focus;
-@@ -4955,7 +5294,7 @@ InitEvents(void)
+@@ -4955,7 +5297,7 @@ InitEvents(void)
  	free(syncEvents.pending);
  	syncEvents.pending = next;
      }


Reply to: