From 06cafdead897f57720a35c3298f4c95f2e11c182 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Tue, 21 Jul 2015 13:10:26 +0300 Subject: [PATCH] IDEA-142889 Tool windows should be initialized in background --- .../wm/impl/ToolWindowManagerImpl.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 96fe52a91bb4..d52fd21957a1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -35,6 +35,9 @@ import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.impl.EditorsSplitters; import com.intellij.openapi.keymap.Keymap; import com.intellij.openapi.keymap.KeymapManager; +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -481,9 +484,25 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements ToolWindowEP[] beans = Extensions.getExtensions(ToolWindowEP.EP_NAME); for (final ToolWindowEP bean : beans) { final Condition condition = bean.getCondition(); - if (condition == null || condition.value(myProject)) { + if (condition == null) { initToolWindow(bean); } + else { + ProgressManager.getInstance().run( + new Task.Backgroundable(myProject, bean.id + " initialization", true) { + @Override + public void run(@NotNull ProgressIndicator indicator) { + if (condition.value(myProject)) { + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + initToolWindow(bean); + } + }); + } + } + }); + } } }