IDEA-122792: do not schedule toolbar refresh for partially initialized target component
authorAleksey Pivovarov <AMPivovarov@gmail.com>
Tue, 27 Jan 2015 11:21:07 +0000 (14:21 +0300)
committerAleksey Pivovarov <AMPivovarov@gmail.com>
Tue, 27 Jan 2015 13:43:37 +0000 (16:43 +0300)
this is better fix for 193b3ae

if target component is not shown yet, ModalityState.stateForComponent() will return NON_MODAL, causing memory leak

platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java

index 453681b96b1ec2a0472babcad280624928345655..66f023ec037d237ce05bdcb4888dbc36eb301183 100644 (file)
@@ -45,6 +45,7 @@ import com.intellij.ui.switcher.SwitchTarget;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.JBUI;
 import com.intellij.util.ui.UIUtil;
+import com.intellij.util.ui.update.UiNotifyConnector;
 import org.jetbrains.annotations.NotNull;
 
 import javax.swing.*;
@@ -921,13 +922,13 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
   public void setTargetComponent(final JComponent component) {
     myTargetComponent = component;
 
-    if (myTargetComponent != null && myTargetComponent.isVisible()) {
-      ApplicationManager.getApplication().invokeLater(new DumbAwareRunnable() {
+    if (myTargetComponent != null) {
+      UiNotifyConnector.doWhenFirstShown(myTargetComponent, new DumbAwareRunnable() {
         @Override
         public void run() {
           myUpdater.updateActions(false, false);
         }
-      }, ModalityState.stateForComponent(myTargetComponent));
+      });
     }
   }