On Fri, 20 Dec 2024 20:43:37 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:

>> In MouseInfo.getPointerInfo()
>> The point is updated here 
>> [fillPointWithCoords()](https://github.com/openjdk/jdk/blob/7ba969a576eb92446e40587fecf98e1e4aba8883/src/java.desktop/share/classes/java/awt/MouseInfo.java#L72)
>>  .
>> 
>> and what follows after
>> 
>> 
>> for (int i = 0; i < gds.length; i++) {
>>                 GraphicsConfiguration gc = gds[i].getDefaultConfiguration();
>>                 Rectangle bounds = gc.getBounds();
>>                 if (bounds.contains(point)) { 
>>                  // checks if the point updated by  fillPointWithCoords
>>                   // is within the bounds of any of the  screen device else 
>> it returns null
>>                     retval = new PointerInfo(gds[i], point);
>>                 }
>>             }
>
> I ran it on Windows, sorry I should've said it explicitly.

> Displays: 2 Placement: Side-by-side, with the bottom edge aligned as below
> 
> <img alt="image" width="478" 
> src="https://private-user-images.githubusercontent.com/95945681/397856615-7ea5be69-989f-42b5-ac26-631d170d8db0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzQ3Mjc0NjMsIm5iZiI6MTczNDcyNzE2MywicGF0aCI6Ii85NTk0NTY4MS8zOTc4NTY2MTUtN2VhNWJlNjktOTg5Zi00MmI1LWFjMjYtNjMxZDE3MGQ4ZGIwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjIwVDIwMzkyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZhYWUzZWNkZWZjOGFiZTRjMWE4ODgxMjhhYjE3N2E4NWRkOTA2MmI0MzMyZWJmNmExYTJmODA0ZjgzZGJmMmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vGpCyq1K_5DGxJ-rZPPp5PosfvP4Q90l-3hIAWb1E7M";>
> Screen bounds: 
> Win32GraphicsDevice[screen=0]:java.awt.Rectangle[x=-1920,y=363,width=1280,height=720]
>  
> Win32GraphicsDevice[screen=1]:java.awt.Rectangle[x=0,y=0,width=2293,height=960]
> 
> Stack Trace: ----------System.err:(11/959)---------- 
> java.lang.NullPointerException: Cannot invoke 
> "java.awt.PointerInfo.getLocation()" because the return value of 
> "java.awt.MouseInfo.getPointerInfo()" is null at 
> MouseMoveOffScreen.main(MouseMoveOffScreen.java:57) at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
>  at java.base/java.lang.reflect.Method.invoke(Method.java:565) at 
> com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138) 
> at java.base/java.lang.Thread.run(Thread.java:1447)
> 
> JavaTest Message: Test threw exception: java.lang.NullPointerException: 
> Cannot invoke "java.awt.PointerInfo.getLocation()" because the return value 
> of "java.awt.MouseInfo.getPointerInfo()" is null JavaTest Message: shutting 
> down test

The stack trace wasn't as revealing as I hoped. But the monitor config may tell 
us something.
(0, 200) is a location that is off the top of screen 1, so not within the 
virtual bounds.
But it is interesting that you get NPE before the fix as well .. perhaps the 
windows clamping isn't happening as Alisen said. I think we need to understand 
that as the next step.

After that , since it looks to me like the bounds of all screens need to be 
looked at to clamp because we can't rely on a single rectangle defining it even 
if there's a single virtual screen, and need to look at the union.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22781#discussion_r1894379782

Reply via email to