From 8aff053d2f07f646e6b59c90103534041a600ff6 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Fri, 7 Jul 2017 16:41:18 +0300 Subject: [PATCH] Fix app-icon setting for debug IDE on macOS JFrame.setIconImages() doesn't work on macOS. --- .../src/com/intellij/idea/StartupUtil.java | 1 + .../src/com/intellij/ui/AppIcon.java | 4 +-- .../src/com/intellij/ui/AppUIUtil.java | 28 +++++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java index 9cbdcebb3653..69c7a6d67ade 100644 --- a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java +++ b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java @@ -93,6 +93,7 @@ public class StartupUtil { if (!Main.isHeadless()) { AppUIUtil.updateFrameClass(); + AppUIUtil.updateAppIcon(); newConfigFolder = !new File(PathManager.getConfigPath()).exists(); } diff --git a/platform/platform-impl/src/com/intellij/ui/AppIcon.java b/platform/platform-impl/src/com/intellij/ui/AppIcon.java index 38db7e0c7d87..03d6ec3cf2b2 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppIcon.java +++ b/platform/platform-impl/src/com/intellij/ui/AppIcon.java @@ -165,7 +165,7 @@ public abstract class AppIcon { @SuppressWarnings("UseJBColor") - private static class MacAppIcon extends BaseIcon { + static class MacAppIcon extends BaseIcon { private BufferedImage myAppImage; private Map myProgressImagesCache = new HashMap<>(); @@ -359,7 +359,7 @@ public abstract class AppIcon { } } - private static void setDockIcon(BufferedImage image) { + static void setDockIcon(BufferedImage image) { try { getAppMethod("setDockIconImage", Image.class).invoke(getApp(), image); } diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index 9eb1377c3d99..d7f8ce105382 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -35,8 +35,10 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.ui.components.JBScrollPane; +import com.intellij.ui.AppIcon.MacAppIcon; import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.ImageUtil; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.SwingHelper; import org.jetbrains.annotations.NonNls; @@ -68,15 +70,26 @@ public class AppUIUtil { window.setIconImages(getAppIconImages()); } + public static void updateAppIcon() { + // Forcedly set app-icon for the debug IDE on macOS. + ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance(); + if (SystemInfo.isMac && appInfo.getBuild().isSnapshot()) { + Image bigIcon = getBigAppIcon(); + if (bigIcon != null) { + MacAppIcon.setDockIcon(ImageUtil.toBufferedImage(bigIcon)); + } + } + } + @SuppressWarnings({"UnnecessaryFullyQualifiedName", "deprecation"}) private static List getAppIconImages() { ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance(); List images = ContainerUtil.newArrayListWithCapacity(3); if (SystemInfo.isUnix) {//MacOS is Unix too - String bigIconUrl = appInfo.getBigIconUrl(); - if (bigIconUrl != null) { - images.add(com.intellij.util.ImageLoader.loadFromResource(bigIconUrl)); + Image bigIcon = getBigAppIcon(); + if (bigIcon != null) { + images.add(bigIcon); } } @@ -91,6 +104,15 @@ public class AppUIUtil { return images; } + private static Image getBigAppIcon() { + ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance(); + String bigIconUrl = appInfo.getBigIconUrl(); + if (bigIconUrl != null) { + return ImageLoader.loadFromResource(bigIconUrl); + } + return null; + } + public static void invokeLaterIfProjectAlive(@NotNull Project project, @NotNull Runnable runnable) { final Application application = ApplicationManager.getApplication(); if (application.isDispatchThread()) {