From dedef74304ecc66d2eda68561e9d45baa3353e91 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 15 Apr 2025 18:13:03 +0200 Subject: [PATCH] IJPL-179637 ui: hide unsupported actions for remote recent projects GitOrigin-RevId: dba826625b170b39260eeb59feeaaa2a13385b7f --- .../projectActions/ChangeProjectIconAction.kt | 20 ++++++++++++++----- .../projectActions/CopyProjectPathAction.kt | 2 ++ .../CreateNewProjectGroupAction.kt | 2 ++ .../MoveProjectToGroupAction.kt | 2 ++ .../MoveProjectToGroupActionGroup.kt | 7 +++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/ChangeProjectIconAction.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/ChangeProjectIconAction.kt index 194ee064c50c..db0a363c45d6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/ChangeProjectIconAction.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/ChangeProjectIconAction.kt @@ -8,11 +8,14 @@ import com.intellij.openapi.actionSystem.* import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.fileChooser.FileChooserFactory import com.intellij.openapi.project.DumbAwareAction +import com.intellij.openapi.project.Project import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreenUIManager +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProviderRecentProjectItem import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectItem +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectTreeItem import com.intellij.ui.IconDeferrer import com.intellij.ui.components.AnActionLink import com.intellij.ui.components.JBLabel @@ -41,7 +44,9 @@ internal class ChangeProjectIconAction : RecentProjectsWelcomeScreenActionBase() } override fun actionPerformed(event: AnActionEvent) { - val projectPath = getProjectPath(event)!! + val project = event.project + val selectedItem = getSelectedItem(event) + val projectPath = getProjectPath(project, selectedItem) ?: return val basePath = RecentProjectIconHelper.getDotIdeaPath(projectPath) ?: return val ui = ProjectIconUI(projectPath) @@ -93,16 +98,21 @@ internal class ChangeProjectIconAction : RecentProjectsWelcomeScreenActionBase() } } - fun getProjectPath(event: AnActionEvent): String? { - val selectedItem = getSelectedItem(event) + private fun getProjectPath(project: Project?, selectedItem: RecentProjectTreeItem?): String? { if (selectedItem is RecentProjectItem) { return selectedItem.projectPath } - return event.project?.let { ProjectWindowCustomizerService.projectPath(it) } + if (project != null) { + return ProjectWindowCustomizerService.projectPath(project) + } + return null } override fun update(event: AnActionEvent) { - event.presentation.isEnabled = getProjectPath(event) != null + val project = event.project + val selectedItem = getSelectedItem(event) + event.presentation.isEnabled = getProjectPath(project, selectedItem) != null + event.presentation.isVisible = selectedItem !is ProviderRecentProjectItem } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CopyProjectPathAction.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CopyProjectPathAction.kt index 9b481884145c..aa4a1418e60c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CopyProjectPathAction.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CopyProjectPathAction.kt @@ -4,6 +4,7 @@ package com.intellij.openapi.wm.impl.welcomeScreen.projectActions import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.ide.CopyPasteManager import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProviderRecentProjectItem import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectItem import java.awt.datatransfer.StringSelection @@ -18,6 +19,7 @@ class CopyProjectPathAction : RecentProjectsWelcomeScreenActionBase() { override fun update(event: AnActionEvent) { val item = getSelectedItem(event) event.presentation.isEnabled = item is RecentProjectItem + event.presentation.isVisible = item !is ProviderRecentProjectItem } override fun actionPerformed(event: AnActionEvent) { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CreateNewProjectGroupAction.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CreateNewProjectGroupAction.kt index b66c6a63fe82..ac5f2161e271 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CreateNewProjectGroupAction.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/CreateNewProjectGroupAction.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.ui.InputValidator import com.intellij.openapi.ui.Messages import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProjectsGroupItem +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProviderRecentProjectItem import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectItem /** @@ -37,6 +38,7 @@ class CreateNewProjectGroupAction : RecentProjectsWelcomeScreenActionBase() { override fun update(event: AnActionEvent) { val item = getSelectedItem(event) event.presentation.isEnabled = item == null || item is RecentProjectItem || item is ProjectsGroupItem + event.presentation.isVisible = item !is ProviderRecentProjectItem } override fun getActionUpdateThread(): ActionUpdateThread { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupAction.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupAction.kt index ca0fe25f277e..aadbb57ebb69 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupAction.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupAction.kt @@ -4,6 +4,7 @@ package com.intellij.openapi.wm.impl.welcomeScreen.projectActions import com.intellij.ide.ProjectGroup import com.intellij.ide.RecentProjectsManager import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProviderRecentProjectItem import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectItem /** @@ -26,5 +27,6 @@ class MoveProjectToGroupAction(private val myGroup: ProjectGroup) : RecentProjec override fun update(event: AnActionEvent) { val item = getSelectedItem(event) event.presentation.isEnabled = item is RecentProjectItem + event.presentation.isVisible = item !is ProviderRecentProjectItem } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupActionGroup.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupActionGroup.kt index 56ca5e09678b..f4fb52a5a675 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupActionGroup.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/projectActions/MoveProjectToGroupActionGroup.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.project.DumbAware import com.intellij.openapi.util.text.NaturalComparator import com.intellij.openapi.wm.impl.welcomeScreen.projectActions.RecentProjectsWelcomeScreenActionBase.Companion.getSelectedItems import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.CloneableProjectItem +import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.ProviderRecentProjectItem import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectItem /** @@ -17,6 +18,12 @@ class MoveProjectToGroupActionGroup : DefaultActionGroup(), DumbAware { return ActionUpdateThread.EDT } + override fun update(e: AnActionEvent) { + val items = getSelectedItems(e).orEmpty() + val isHidden = items.isNotEmpty() && items.all { it is ProviderRecentProjectItem } + e.presentation.isVisible = !isHidden + } + override fun getChildren(e: AnActionEvent?): Array { if (e == null) return AnAction.EMPTY_ARRAY