randr: Make the RRConstrainCursorHarder logic the same as miPointerSetPosition
The constraining logic in RRConstrainCursorHarder allows the cursor to reach crtc positions of x = width and y = height while the constraining code in miPointerSetPosition only allows it to reach x = width - 1 and y = height - 1 for the analogous screen case. This patch makes the former's logic equivalent to the latter's which allows applications to benefit from Fitts's law. E.g. a maximized application adjacent to a crtc border wouldn't get pointer events if the user moved the pointer all the way until it's contained. Signed-off-by: Rui Matos <tiagomatos@gmail.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
548c6fe044
commit
9cc44b955b
|
@ -1459,7 +1459,7 @@ RRConstrainCursorHarder(DeviceIntPtr pDev, ScreenPtr pScreen, int mode, int *x,
|
|||
|
||||
crtc_bounds(crtc, &left, &right, &top, &bottom);
|
||||
|
||||
if ((*x >= left) && (*x <= right) && (*y >= top) && (*y <= bottom))
|
||||
if ((*x >= left) && (*x < right) && (*y >= top) && (*y < bottom))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1475,24 +1475,15 @@ RRConstrainCursorHarder(DeviceIntPtr pDev, ScreenPtr pScreen, int mode, int *x,
|
|||
crtc_bounds(crtc, &left, &right, &top, &bottom);
|
||||
miPointerGetPosition(pDev, &nx, &ny);
|
||||
|
||||
if ((nx >= left) && (nx <= right) && (ny >= top) && (ny <= bottom)) {
|
||||
if ((*x <= left) || (*x >= right)) {
|
||||
int dx = *x - nx;
|
||||
|
||||
if (dx > 0)
|
||||
*x = right;
|
||||
else if (dx < 0)
|
||||
*x = left;
|
||||
}
|
||||
|
||||
if ((*y <= top) || (*y >= bottom)) {
|
||||
int dy = *y - ny;
|
||||
|
||||
if (dy > 0)
|
||||
*y = bottom;
|
||||
else if (dy < 0)
|
||||
*y = top;
|
||||
}
|
||||
if ((nx >= left) && (nx < right) && (ny >= top) && (ny < bottom)) {
|
||||
if (*x < left)
|
||||
*x = left;
|
||||
if (*x >= right)
|
||||
*x = right - 1;
|
||||
if (*y < top)
|
||||
*y = top;
|
||||
if (*y >= bottom)
|
||||
*y = bottom - 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user