RFR: 8345538: Robot.mouseMove doesn't clamp bounds on macOS when trying to move mouse off screen [v14]
Harshitha Onkar
honkar at openjdk.org
Tue May 27 19:03:00 UTC 2025
On Tue, 27 May 2025 17:35:17 GMT, Alisen Chung <achung at openjdk.org> wrote:
>> Currently on macOS when mouseMove is given an offscreen coordinate to move the mouse to, mouseMove will physically clamp to the edge of the screen, but if you try to grab the mouse location immediately after by using MouseInfo.getPointerInfo().getLocation() you will get the value of the offscreen point.
>>
>> Windows and linux do this clamping and coordinate handling for us, but new distributions may not necessarily handle clamping the same way, so Robot should be checking for clamping rather than delegating it to native.
>>
>> This fix updates shared code to cache the screen bounds and adds a check to not exceed the bounds in mouseMove. The caching is done in the Robot constructor, so if the screen bounds changes the constructor must be called again to update to the new bounds.
>
> Alisen Chung has updated the pull request incrementally with two additional commits since the last revision:
>
> - add logging to test
> - test require macos, spacing in crobot
Latest changes LGTM on macOS (single and dual-monitor setup). Please ensure to sync mainline and run CI for sanity check.
src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java line 85:
> 83: int currXDiff = Math.abs(x - cP.x);
> 84: int currYDiff = Math.abs(y - cP.y);
> 85: int currDiff = (int) Math.round(Math.hypot(currXDiff, currYDiff));
Since `Math.hypot(currXDiff, currYDiff)` translates to `sqrt(currXDiff^2, currYDiff^2)`, ideally Math.abs in redundant on previous lines. But no harm in keeping it.
Suggestion:
int currXDiff = x - cP.x;
int currYDiff = y - cP.y;
int currDiff = (int) Math.round(Math.hypot(currXDiff, currYDiff));
-------------
Marked as reviewed by honkar (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/22781#pullrequestreview-2872218256
PR Review Comment: https://git.openjdk.org/jdk/pull/22781#discussion_r2109944370
More information about the client-libs-dev
mailing list