From b603ac04d8e07f6a35bbf401c2710fc897414e9f Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Wed, 29 Aug 2018 15:10:25 +0300 Subject: [PATCH] IDEA-197838 Project leak via animated icon in PluginsGroupComponentWithProgress --- .../plugins/PluginManagerConfigurableNew.java | 1 + .../PluginsGroupComponentWithProgress.java | 24 ++++++++++++------- .../ide/plugins/newui/SearchResultPanel.java | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurableNew.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurableNew.java index 23171cf9b6c9..e21b610a036e 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurableNew.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurableNew.java @@ -464,6 +464,7 @@ public class PluginManagerConfigurableNew public void disposeUIResources() { myPluginsModel.toBackground(); Disposer.dispose(mySearchUpdateAlarm); + myTrendingSearchPanel.loading(false); if (myShutdownCallback != null) { myShutdownCallback.run(); diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginsGroupComponentWithProgress.java b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginsGroupComponentWithProgress.java index 8c05e4344056..09cfafc00192 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginsGroupComponentWithProgress.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginsGroupComponentWithProgress.java @@ -16,15 +16,7 @@ import java.awt.*; * @author Alexander Lobas */ public class PluginsGroupComponentWithProgress extends PluginsGroupComponent { - private AsyncProcessIcon myIcon = new AsyncProcessIcon.Big("Loading") { - @NotNull - @Override - protected Rectangle calculateBounds(@NotNull JComponent container) { - Dimension size = container.getSize(); - Dimension iconSize = getPreferredSize(); - return new Rectangle((size.width - iconSize.width) / 2, (size.height - iconSize.height) / 2, iconSize.width, iconSize.height); - } - }; + private AsyncProcessIcon myIcon = new CenteredIcon(); public PluginsGroupComponentWithProgress(@NotNull LayoutManager layout, @NotNull EventHandler eventHandler, @@ -88,4 +80,18 @@ public class PluginsGroupComponentWithProgress extends PluginsGroupComponent { Disposer.dispose(myIcon); myIcon = null; } + + private static class CenteredIcon extends AsyncProcessIcon.Big { + public CenteredIcon() { + super("Loading"); + } + + @NotNull + @Override + protected Rectangle calculateBounds(@NotNull JComponent container) { + Dimension size = container.getSize(); + Dimension iconSize = getPreferredSize(); + return new Rectangle((size.width - iconSize.width) / 2, (size.height - iconSize.height) / 2, iconSize.width, iconSize.height); + } + } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java b/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java index cfd9db53d46b..808d8108e860 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java @@ -116,7 +116,7 @@ public abstract class SearchResultPanel { protected abstract void handleQuery(@NotNull String query, @NotNull PluginsGroup result); - private void loading(boolean start) { + public void loading(boolean start) { PluginsGroupComponentWithProgress panel = (PluginsGroupComponentWithProgress)myPanel; if (start) { panel.startLoading();