diff --git a/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectAction.kt b/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectAction.kt index c6142c817357..e4ab9db2db73 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectAction.kt +++ b/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectAction.kt @@ -18,7 +18,7 @@ class CloseProjectAction : CloseProjectsActionBase() { override fun canClose(project: Project, currentProject: Project): Boolean = project === currentProject - override fun shouldShow(e: AnActionEvent): Boolean = e.project != null + override fun shouldShow(e: AnActionEvent): Boolean = true override fun update(e: AnActionEvent) { super.update(e) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectsActionBase.kt b/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectsActionBase.kt index 430d7c857127..28fb9f950e60 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectsActionBase.kt +++ b/platform/platform-impl/src/com/intellij/ide/actions/CloseProjectsActionBase.kt @@ -3,15 +3,16 @@ package com.intellij.ide.actions import com.intellij.ide.RecentProjectsManager import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.PlatformCoreDataKeys import com.intellij.openapi.actionSystem.remoting.ActionRemoteBehaviorSpecification import com.intellij.openapi.application.WriteIntentReadAction -import com.intellij.openapi.application.writeIntentReadAction import com.intellij.openapi.project.DumbAwareAction import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.wm.WindowManager +import com.intellij.openapi.wm.impl.ProjectFrameHelper import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame +import com.intellij.ui.ComponentUtil /** * @author Konstantin Bulenkov @@ -22,7 +23,7 @@ abstract class CloseProjectsActionBase : DumbAwareAction(), ActionRemoteBehavior } override fun actionPerformed(e: AnActionEvent) { - val currentProject = e.getData(CommonDataKeys.PROJECT) ?: return + val currentProject = getProjectEvenIfNotInitialized(e) ?: return ProjectManager.getInstance().openProjects .filter { canClose(it, currentProject) } .forEach { @@ -42,10 +43,15 @@ abstract class CloseProjectsActionBase : DumbAwareAction(), ActionRemoteBehavior } override fun update(e: AnActionEvent) { - val project = e.project + val project = getProjectEvenIfNotInitialized(e) e.presentation.isEnabledAndVisible = project != null && !project.isDefault && shouldShow(e) } + private fun getProjectEvenIfNotInitialized(e: AnActionEvent): Project? { + return e.project ?: ProjectFrameHelper.getFrameHelper( + ComponentUtil.getWindow(e.getData(PlatformCoreDataKeys.CONTEXT_COMPONENT)))?.project + } + protected abstract fun shouldShow(e: AnActionEvent): Boolean protected abstract fun canClose(project: Project, currentProject: Project): Boolean