On Wed, 7 Jun 2023 20:13:55 GMT, Alisen Chung <[email protected]> wrote:

>> If I got it right the switching to `ICONIFIED`/`MAXIMIZED_BOTH` state takes 
>> more time on macOS 13 than on previous macOS version. So the test failure is 
>> triggered by the lack of synchronisation.
>> When you added displayChanged() call you introduced some kind of delay and 
>> the problem stopped happening but it is still present. I do not think any 
>> changes are required in JDK but the test definitely needs some 
>> modifications. 
>> In particular I believe the test must check the state of the frame only when 
>> the corresponding `window state changed` event is received.
>
>> If I got it right the switching to `ICONIFIED`/`MAXIMIZED_BOTH` state takes 
>> more time on macOS 13 than on previous macOS version. So the test failure is 
>> triggered by the lack of synchronisation. When you added displayChanged() 
>> call you introduced some kind of delay and the problem stopped happening but 
>> it is still present. I do not think any changes are required in JDK but the 
>> test definitely needs some modifications. In particular I believe the test 
>> must check the state of the frame only when the corresponding `window state 
>> changed` event is received.
> 
> I did some testing and I think that without the delay, when the frame moves 
> from iconified to maximized states, the second windowStateChanged event never 
> comes (first being iconified -> normal, second being normal -> maximized), so 
> the test will not pass even if we only check state of the frame on a 
> windowStateChanged event. 
> 
> Why do you think no changes are required in the JDK? Shouldn't there be some 
> synchronization needed when calling the native deminiaturize and maximize 
> functions in CPlatformWindow?

@alisenchung Before digging deeper on Cocoa Event Handling, please check if 
fixing on native side by waiting for an approriate NSEvent is a viable solution 
in this case. 

A gist of Cocoa Event Handling mechanism - 

1. NSRunLoop in the event loop 
[NSApplicationAWT.m#L303](https://github.com/openjdk/jdk/blob/ea41907396a70933c4f6e6b0f247f7ba589a3a23/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m#L303)
 handled by NSApp. 
2. NSApp converts this event into NSEvent object and dispatches using sendEvent 
to the appropriate NSView object.

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

PR Comment: https://git.openjdk.org/jdk/pull/14226#issuecomment-1581552689

Reply via email to