Skip to content
Snippets Groups Projects
  1. Dec 27, 2013
  2. Dec 20, 2013
  3. Dec 19, 2013
  4. Dec 16, 2013
  5. Dec 13, 2013
  6. Dec 12, 2013
  7. Dec 11, 2013
    • Peter Hutterer's avatar
      dix: fix check for grab type · 929795d5
      Peter Hutterer authored
      
      Signed-off-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
      929795d5
    • Peter Hutterer's avatar
      Xi: ungrab device when releasing a passive grab without ButtonReleaseMask (#71878) · 23394c7f
      Peter Hutterer authored
      If an touch triggers an async button grab and that grab does not have the
      ButtonReleaseMask set, the TouchEnd is never delivered, deliveries is 0  and
      the grab is never deactivated.
      
      If the grab is pointer async and keyboard sync, the keyboard events are stuck
      in EnqueueEvent until some other pointer event terminates the grab.
      
      Change this to check for the number of listeners. If we're about to deliver a
      TouchEnd to a passive pointer grab, the number of listeners is already 1 -
      pointer grabs always accept so other listeners were removed.
      
      X.Org Bug 71878 <http://bugs.freedesktop.org/show_bug.cgi?id=71878
      
      >
      
      Signed-off-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
      23394c7f
    • Ben Gamari's avatar
      Xi: Don't ActivateEarlyAccept POINTER_REGULAR listeners · c1d30b5b
      Ben Gamari authored and Peter Hutterer's avatar Peter Hutterer committed
      
      Bug #71878 describes a bug resulting in the server ceasing to respond to
      keyboard input after a touch event. The problem might be the following:
      
      DeliverTouchBeginEvent tries to deliver an event to a listener of type
      LISTENER_POINTER_REGULAR, taking the following if branch,
      
          if (listener->type == LISTENER_POINTER_REGULAR ||
              listener->type == LISTENER_POINTER_GRAB) {
              rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
                                             grab, xi2mask);
              if (rc == Success) {
                  listener->state = LISTENER_IS_OWNER;
                  /* async grabs cannot replay, so automatically accept this touch */
                  if (dev->deviceGrab.grab &&
                      dev->deviceGrab.fromPassiveGrab &&
                      dev->deviceGrab.grab->pointerMode == GrabModeAsync)
                      ActivateEarlyAccept(dev, ti);
              }
              goto out;
          }
      
      DeliverTouchEmulatedEvent succeeds.  The deviceGrab meets all
      three of the conditions of the inner if, enters
      ActivateEarlyAccept which then fails due to,
      
          BUG_RETURN(ti->listeners[0].type != LISTENER_GRAB &&
                     ti->listeners[0].type != LISTENER_POINTER_GRAB);
      
      That is, despite listener->type == LISTENER_POINTER_REGULAR. With my
      non-existent knowledge of XINPUT, it seems like the solution here
      might be to only ActivateEarlyAccept when listener->type ==
      LISTENER_POINTER_GRAB.
      
      Signed-off-by: default avatarBen Gamari <bgamari.foss@gmail.com>
      Reviewed-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
      Signed-off-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
      c1d30b5b
  8. Dec 10, 2013
  9. Dec 09, 2013
Loading