From b82824ec6dc3f14c3711104bf0ffd792c86d19ba Mon Sep 17 00:00:00 2001 From: Andrei Rybak Date: Thu, 27 Jul 2023 02:10:11 +0200 Subject: [PATCH] MainGui: set icon for Taskbar Use java.awt.Taskbar added in Java 9 to set the taskbar icon image. This mainly affects macOS, as far as I know, which doesn't automatically take the icon of the JFrame (`window`). The default Duke icon will be replaced by the Resoday logo in the macOS dock. The downside is that macOS doesn't segregate different Java applications, so all apps running under with the same binary file `java` are gathered under the one icon. --- CHANGELOG | 2 ++ src/main/java/dev/andrybak/resoday/gui/Logo.java | 6 ++++++ src/main/java/dev/andrybak/resoday/gui/MainGui.java | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index c3a81cb..ce8be31 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ - Rendering of the icon in the title bar of the main window has been fixed in Microsoft Windows. +- Dock on macOS will now show the Resoday icon instead of the default + Duke icon of the JVM. v1.5 - Fixed dead link in "About" dialog diff --git a/src/main/java/dev/andrybak/resoday/gui/Logo.java b/src/main/java/dev/andrybak/resoday/gui/Logo.java index c0e283d..79e4040 100644 --- a/src/main/java/dev/andrybak/resoday/gui/Logo.java +++ b/src/main/java/dev/andrybak/resoday/gui/Logo.java @@ -26,6 +26,12 @@ public static List getImages() { ); } + public static Image getMultiResolutionImage() { + Image icon32 = getImage(APP_ICON_32_FILENAME); + Image icon64 = getFixedResolutionImage(); + return new BaseMultiResolutionImage(icon32, icon64); + } + private static Image getImage(String filename) { URL url = Objects.requireNonNull(MainGui.class.getResource(filename)); return Toolkit.getDefaultToolkit().getImage(url); diff --git a/src/main/java/dev/andrybak/resoday/gui/MainGui.java b/src/main/java/dev/andrybak/resoday/gui/MainGui.java index 5efed51..64e2637 100644 --- a/src/main/java/dev/andrybak/resoday/gui/MainGui.java +++ b/src/main/java/dev/andrybak/resoday/gui/MainGui.java @@ -35,6 +35,7 @@ import java.awt.BorderLayout; import java.awt.Desktop; import java.awt.Dimension; +import java.awt.Taskbar; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -388,6 +389,9 @@ private void goInEdt(Path configDir) { * Can't use Logo.getMultiResolutionImage() here because of a JDK bug on Linux. */ window.setIconImages(Logo.getImages()); + if (Taskbar.isTaskbarSupported() && Taskbar.getTaskbar().isSupported(Taskbar.Feature.ICON_IMAGE)) { + Taskbar.getTaskbar().setIconImage(Logo.getMultiResolutionImage()); + } window.setVisible(true); window.addWindowListener(new WindowAdapter() { @Override