diff --git a/platform/lang-api/src/com/intellij/execution/services/ServiceViewManager.java b/platform/lang-api/src/com/intellij/execution/services/ServiceViewManager.java index b30e9b19112c..738b35779b06 100644 --- a/platform/lang-api/src/com/intellij/execution/services/ServiceViewManager.java +++ b/platform/lang-api/src/com/intellij/execution/services/ServiceViewManager.java @@ -5,14 +5,17 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.concurrency.Promise; @ApiStatus.Experimental public interface ServiceViewManager { Key SERVICE_VIEW_MASTER_COMPONENT = Key.create("SERVICE_VIEW_MASTER_COMPONENT"); - void selectNode(Object node); - static ServiceViewManager getInstance(Project project) { return ServiceManager.getService(project, ServiceViewManager.class); } + + @NotNull + Promise selectNode(Object node, boolean activate, boolean focus); } diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java index dd159f250999..c05b908d68a4 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java @@ -178,7 +178,7 @@ public class RunDashboardManagerImpl implements RunDashboardManager, PersistentS if (configurationSettings != null) { RunConfigurationNode node = new RunConfigurationNode(myProject, Pair.create(configurationSettings, contentDescriptor), getContributor(configurationSettings.getType())); - ServiceViewManager.getInstance(myProject).selectNode(node); + ServiceViewManager.getInstance(myProject).selectNode(node, true, false); } } } diff --git a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewManagerImpl.java index be940760a8fd..5b76206499bd 100644 --- a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewManagerImpl.java @@ -21,6 +21,8 @@ import com.intellij.util.xmlb.annotations.Property; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.concurrency.AsyncPromise; +import org.jetbrains.concurrency.Promise; import javax.swing.*; @@ -63,14 +65,30 @@ public final class ServiceViewManagerImpl implements ServiceViewManager, Persist toolWindow.getContentManager().addContent(toolWindowContent); } + @NotNull @Override - public void selectNode(Object node) { + public Promise selectNode(Object node, boolean activate, boolean focus) { + AsyncPromise result = new AsyncPromise<>(); AppUIUtil.invokeLaterIfProjectAlive(myProject, () -> { - ServiceView content = myServiceView; - if (content != null) { - content.selectNode(node); + Runnable runnable = () -> { + ServiceView view = myServiceView; + if (view == null) { + result.setError(""); + } + else { + view.selectNode(node); + result.setResult(null); + } + }; + ToolWindow window = activate ? ToolWindowManager.getInstance(myProject).getToolWindow(ToolWindowId.SERVICES) : null; + if (window != null) { + window.activate(runnable, false, focus); + } + else { + runnable.run(); } }); + return result; } private void updateToolWindow(ServiceViewContributor.ServiceEvent event) {