On Tue, 11 May 2021 11:43:35 GMT, Tejpal Rebari <treb...@openjdk.org> wrote:

>> Hi All,
>> Please review the following fix for jdk17.
>> 
>> Issue : On MacOS 11 Java Frame and JDialog application is freezing  in Full 
>> Screen  when the System Preference -> General -> Prefer Tabs is set to "Full 
>> Screen". It is also freezing in normal screen when Prefer Tabs is set to 
>> "Always".
>> It doesn't freeze when the Prefer tabs is set to "never".
>> 
>> Fix : The default value of allowsAutomaticWindowTabbing is 0/NO in MacOS 
>> prior to bigSur(11)  
>> (in the AWTWindow.m file),  so the issue is not seen in mac os 10.13 10.14 
>> and 10.15.
>> From MacOS 11 onwards  this value is set to 1/YES and the issue is seen.
>> This issue can also be reproduced in MacOS 10.15 by setting 
>> setAllowsAutomaticWindowTabbing to true in the AWTWindow.m file.
>> 
>> Fix is to set allowsAutomaticWindowTabbing to No for all the MacOS release 
>> staring from 10.12.
>> The allowsAutomaticTabbing was introduced in MacOS 10.12 but the default 
>> value changed in macos11.
>> 
>> Test : Added a manual test and tested on MacOS 10.15 and 11.
>> All the internal tests run are green.
>
> Tejpal Rebari has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   code cleanup

src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java line 325:

> 323:         responder = createPlatformResponder();
> 324:         contentView.initialize(peer, responder);
> 325:         setAllowAutomaticWindowTabbing();

This is in the initialize() method that is being called for every window.
That means the value could be changed by the app (back and forth!) during the 
execution of the program.
We don't want that. So add it in a static initializer block for the class, so 
it is only ever read ONCE and guaranteed to be read before the first window is 
created. This then means the Java method isn't needed and the native method 
will be static.

src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java line 607:

> 605:         
> nativeSetAllowAutomaticTabbingProperty(allowAutomaticWindowTabbing);
> 606:     }
> 607: 

So we need a doPrivilged around the call to getProperty - in the new location 
of the static block

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m line 1106:

> 1104: {
> 1105:     JNI_COCOA_ENTER(env);
> 1106:     if (@available(macOS 10.12, *)) {

@kevinrushforth said that since we set MIN_SDK (not sure of the exact variable 
name) to 10.12, that this is compiled down to a no-op .. which means it is 
useless and doesn't protect you from making the call on 10.11
So you might as well remove it. It won't prevent the crash that will happen on 
10.11.
@mrserb also pointed out people might then copy this pattern not realising it 
does not work, and there's a better way ... apparently ...

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

PR: https://git.openjdk.java.net/jdk/pull/3407

Reply via email to