Skip to content
  • Yufeng Shen's avatar
    dix: fix scale_to_desktop for edge ABS events · 0b02150c
    Yufeng Shen authored and Keith Packard's avatar Keith Packard committed
    
    
    Scale_to_desktop() converts ABS events from device coordinates
    to screen coordinates:
    [dev_X_min, dev_X_max]  -> [screen_X_min, screen_X_max]
    [dev_Y_min, dev_Y_max]  -> [screen_Y_min, screen_Y_max]
    
    An edge ABS event with X = dev_X_max (e.g., generated from the
    edge of a touchscreen) will be converted to have screen X value
    = screen_X_max, which, however, will be filterd out when xserver
    tries to find proper Window to receive the event, because the
    range check for a Window to receive events is
           window_X_min <= event_screen_X < window_X_max
    Events with event_screen_X = screen_X_max will fail the test get
    and rejected by the Window.
    
    To fix this, we change the device to screen coordinates mapping to
    [dev_X_min, dev_X_max]  -> [screen_X_min, screen_X_max-1]
    [dev_Y_min, dev_Y_max]  -> [screen_Y_min, screen_Y_max-1]
    
    Reviewed-by: default avatarChase Douglas <chase.douglas@canonical.com>
    Reviewed-by: default avatarJeremy Huddleston Sequoia <jeremyhu@apple.com>
    Signed-off-by: default avatarYufeng Shen <miletus@chromium.org>
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    0b02150c