mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-20 05:50:04 +01:00
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>
(cherry picked from commit 9cc44b955b)
This commit is contained in:
parent
4689c84a07
commit
bed7d7f31e
1 changed files with 10 additions and 19 deletions
|
|
@ -1465,7 +1465,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;
|
||||
}
|
||||
|
||||
|
|
@ -1481,24 +1481,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…
Add table
Reference in a new issue