xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Wed Jul 30 14:41:00 PDT 2014


 randr/rrpointer.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

New commits:
commit b063a185ab9d2c54669fb6e036fdbae3707c9e4b
Author: David Ung <davidu at nvidia.com>
Date:   Tue Jul 29 15:01:39 2014 -0700

    randr: Fix logic in RRPointerToNearestCrtc
    
    RRPointerToNearestCrtc is suppose to snap to the nearest Crtc,
    but best_x and best_y is always positive, hence when calling
    SetCursorPosition it will make the cursor even further away.
    Correct delta x/y to allow negative values and also use
    "width/height -1" in the calculation.  Also choose the closest
    Crtc by setting the "best" value.
    
    Signed-off-by: David Ung <davidu at nvidia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index eb6b677..b301d05 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -77,21 +77,22 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
 
         if (x < crtc->x)
             dx = crtc->x - x;
-        else if (x > crtc->x + scan_width)
-            dx = x - (crtc->x + scan_width);
+        else if (x > crtc->x + scan_width - 1)
+            dx = crtc->x + (scan_width - 1) - x;
         else
             dx = 0;
         if (y < crtc->y)
             dy = crtc->y - y;
-        else if (y > crtc->y + scan_height)
-            dy = y - (crtc->y + scan_height);
+        else if (y > crtc->y + scan_height - 1)
+            dy = crtc->y + (scan_height - 1) - y;
         else
             dy = 0;
-        dist = dx + dy;
+        dist = dx * dx + dy * dy;
         if (!nearest || dist < best) {
             nearest = crtc;
             best_dx = dx;
             best_dy = dy;
+            best = dist;
         }
     }
     if (best_dx || best_dy)


More information about the xorg-commit mailing list