eclipse.platform.swt icon indicating copy to clipboard operation
eclipse.platform.swt copied to clipboard

[macOS] Only use Decorations#setImage() in Dock if no app bundle set

Open sratz opened this issue 2 months ago • 1 comments

Currently, there are three possible sources for the Dock icon on macOS in the order of precedence:

  1. An explicitly set icon via -Xdock:icon=/path/to/icon.icns which calls NSApp setApplicationIconImage

  2. An implicitly set icon via org.eclipse.swt.widgets.Decorations.setImage(Image) org.eclipse.swt.widgets.Decorations.setImages(Image[]) which in passed down to the Dock also via NSApp setApplicationIconImage

  3. An implicitly set icon in a Bundled.app distrubution via CFBundleIconName / CFBundleIconFile in the Info.plist file

1 and 2 use legacy API NSApp setApplicationIconImage which only supports a single fixed NSImage, i.e. there is no support for dark/light mode and or modern look & feel such as Liquid Glass.

Only 3 (app bundle) supports dynamic icons.

The problem is that 2) currently overwrites whatever 3) has set. On top of that, the Decorations are typically cross-platform, so in fact this will prevents using a macOS-specific icon at all.

We want to prefer 3) over 2), i.e. only pass down the decorations whenever we are not an app bundle with a declared image.

Similar coding also exists in the JVM, where the dock icon is only set if we are not in an app bundle that specifies an icon:

https://github.com/openjdk/jdk21u/blob/8c322f5953ae161d793213f92d13a1f53d995883/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m#L280-L290

Resolves #2627

sratz avatar Oct 14 '25 15:10 sratz

Test Results

  115 files  ±0    115 suites  ±0   10m 0s ⏱️ - 2m 34s 4 546 tests ±0  4 531 ✅ ±0  15 💤 ±0  0 ❌ ±0    311 runs  ±0    308 ✅ ±0   3 💤 ±0  0 ❌ ±0 

Results for commit 0f31d33f. ± Comparison against base commit 79e74c73.

:recycle: This comment has been updated with latest results.

github-actions[bot] avatar Oct 14 '25 15:10 github-actions[bot]