From eeeac2b21aff3a9f2cd9243d2e9873f1f68d523a Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 21 Sep 2016 16:16:26 +0300 Subject: [PATCH] synchronous toolwindows initializing to prevent re-layout during startup --- .../wm/impl/ToolWindowManagerImpl.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 dfa4a01d2b94..21111bd2504e 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 @@ -391,8 +391,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements }, myProject); } - private void initAll() { - List commandsList = new ArrayList<>(); + private void initAll(List commandsList) { appendUpdateToolWindowsPaneCmd(commandsList); JComponent editorComponent = createEditorComponent(myProject); @@ -402,19 +401,23 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements if (myEditorWasActive && editorComponent instanceof EditorsSplitters) { activateEditorComponentImpl(commandsList, true); } - execute(commandsList); } private static JComponent createEditorComponent(@NotNull Project project) { return FrameEditorComponentProvider.EP.getExtensions()[0].createEditorComponent(project); } - private void registerToolWindowsFromBeans() { + private void registerToolWindowsFromBeans(List list) { List beans = Arrays.asList(Extensions.getExtensions(ToolWindowEP.EP_NAME)); for (ToolWindowEP bean : beans) { Condition condition = bean.getCondition(); if (condition == null || condition.value(myProject)) { - EdtInvocationManager.getInstance().invokeLater(() -> initToolWindow(bean)); + list.add(new FinalizableCommand(EmptyRunnable.INSTANCE) { + @Override + public void run() { + initToolWindow(bean); + } + }); } } } @@ -2427,8 +2430,12 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements ToolWindowManagerEx ex = ToolWindowManagerEx.getInstanceEx(project); if (ex instanceof ToolWindowManagerImpl) { ToolWindowManagerImpl myManager = (ToolWindowManagerImpl)ex; - myManager.registerToolWindowsFromBeans(); - EdtInvocationManager.getInstance().invokeLater(() -> myManager.initAll()); + List list = new ArrayList<>(); + myManager.registerToolWindowsFromBeans(list); + myManager.initAll(list); + EdtInvocationManager.getInstance().invokeLater(() -> { + myManager.execute(list); + }); } } }