On Fri, 2 Oct 2020 11:08:23 GMT, Peter Zhelezniakov <pet...@openjdk.org> wrote:

> [JDK-8252015: [macos11] java.awt.TrayIcon requires updates for template 
> images](https://bugs.openjdk.java.net/browse/JDK-8252015)
> 
> ### Problem
> According to Apple's human interface guidelines, developers should use 
> template images for tray icons. This way icons look good when desktop theme 
> or wallpaper change. On the API level, this means setting the 
> `NSImage::isTemplate` flag. Currently there's no way in Java to set this 
> flag. Even if one uses a template (black and transparent pixels only) image, 
> MacOS will treat it as regular image. As a result, the image will not be 
> visible when using dark theme.
> 
> ### Solution:
> * Add a new system property, `java.awt.enableTemplateImages`, to indicate 
> that template images are being used by tray icons.When this property is set, 
> all tray icon images are treated as templates. It's the developers' 
> responsibility to ensure their images are indeed templates. This property 
> allows us to avoid new API and accidental behavior changes
> * Value of this property is passed from Java into `NSImage::setTemplate`
> * We need the tray icon image rendered by MacOS, so we use a button (rather 
> than a view) to host the image
> 
> To do after CSR approval:
> - [ ] Rename property `java.awt.`
> - [ ] Add `TrayIcon` javadoc, use `@systemProperty` tag there

src/java.desktop/macosx/native/libawt_lwawt/awt/CTrayIcon.m line 99:

> 97: 
> 98:     // Its a bad idea to force the item to release our view by setting
> 99:     // the item's view to nil: it can lead to a crash in some scenarios.

This comment seems outdated, we either need to nullify the menu delegate or 
follow the old approach and update the comment on why the menuDelegate is not 
set to nil.

src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java line 197:

> 195: 
> 196:     void updateNativeImage(Image image) {
> 197:         boolean imageTemplate = 
> Boolean.parseBoolean(System.getProperty("sun.awt.enableTemplateImages", 
> "false"));

"sun.awt.enableTemplateImages" -> "apple.awt.enableTemplateImages"

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

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

Reply via email to