Skip to content
  • Olivier Fourdan's avatar
    xwayland: Use relative device for buttons/axis/enter/leave · 4d2128fd
    Olivier Fourdan authored
    
    
    We are using the relative pointer for motion events, but buttons and
    axis events still go through the absolute pointer device.
    
    That means additional DeviceChanged events that could be avoided if the
    buttons and axis events were coming from the same device as motion
    events.
    
    However, routing just the buttons and axis events is not sufficient. In
    Weston, clicking the window decoration of an Xwayland client gives us a
    wl_pointer.button event immediately followed by a wl_pointer.leave event.
    The leave event does not contain any button state information, so the button
    remains logically down in the DIX.
    
    Once the pointer button is released, a wl_pointer.enter event is sent with
    the current button state (zero). This needs to trigger a ButtonRelease event
    but for that we need to ensure that the device is the same as the one we send
    ButtonPress events through.
    
    Route those events along with enter/leave events to the relative pointer
    if available so that motion, buttons and axis events come from the same
    device (most of the time).
    
    Suggested-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
    Signed-off-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
    Related: xorg/xserver#1130
    (cherry picked from commit a4095162)
    (cherry picked from commit 20c78f38)
    4d2128fd