From b629894d6d37654d98dd549b8a2a0de9f5f44785 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Wed, 9 Oct 2013 18:36:33 +0400 Subject: [PATCH] [log] Initialize the content pane in the EDT Btw, it should be rewritten to load the log not on the startup, but only when user opens the tab for the first time. --- .../intellij/vcs/log/impl/VcsLogManager.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java index 3cdce62efa7f..beea4eaf5c2c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java @@ -26,6 +26,7 @@ import com.intellij.ui.content.impl.ContentImpl; import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; +import com.intellij.util.ui.UIUtil; import com.intellij.vcs.log.VcsLogObjectsFactory; import com.intellij.vcs.log.VcsLogProvider; import com.intellij.vcs.log.VcsLogRefresher; @@ -72,25 +73,30 @@ public class VcsLogManager extends AbstractProjectComponent { changesView.executeWhenInitialized(new DumbAwareRunnable() { @Override public void run() { - final Map logProviders = findLogProviders(); - if (logProviders.isEmpty()) { - return; - } - - final VcsLogContainer mainPanel = new VcsLogContainer(myProject); - final Content content = new ContentImpl(mainPanel, "Log", true); - ChangesViewContentI changesView = ChangesViewContentManager.getInstance(myProject); - changesView.addContent(content); - content.setCloseable(false); - - VcsLogDataHolder.init(myProject, myLogObjectsFactory, logProviders, new Consumer() { + UIUtil.invokeAndWaitIfNeeded(new Runnable() { @Override - public void consume(VcsLogDataHolder vcsLogDataHolder) { - Disposer.register(myProject, vcsLogDataHolder); - VcsLogUI logUI = new VcsLogUI(vcsLogDataHolder, myProject, new VcsLogColorManagerImpl(logProviders.keySet())); - mainPanel.init(logUI.getMainFrame().getMainComponent()); - myLogRefresher = new PostponeableLogRefresher(myProject, vcsLogDataHolder, content); - refreshLogOnVcsEvents(logProviders); + public void run() { + final Map logProviders = findLogProviders(); + if (logProviders.isEmpty()) { + return; + } + + final VcsLogContainer mainPanel = new VcsLogContainer(myProject); + final Content content = new ContentImpl(mainPanel, "Log", true); + ChangesViewContentI changesView = ChangesViewContentManager.getInstance(myProject); + changesView.addContent(content); + content.setCloseable(false); + + VcsLogDataHolder.init(myProject, myLogObjectsFactory, logProviders, new Consumer() { + @Override + public void consume(VcsLogDataHolder vcsLogDataHolder) { + Disposer.register(myProject, vcsLogDataHolder); + VcsLogUI logUI = new VcsLogUI(vcsLogDataHolder, myProject, new VcsLogColorManagerImpl(logProviders.keySet())); + mainPanel.init(logUI.getMainFrame().getMainComponent()); + myLogRefresher = new PostponeableLogRefresher(myProject, vcsLogDataHolder, content); + refreshLogOnVcsEvents(logProviders); + } + }); } }); }