IJPL-179637 ui: hide unsupported actions for remote recent projects

GitOrigin-RevId: dba826625b170b39260eeb59feeaaa2a13385b7f
This commit is contained in:
Aleksey Pivovarov
2025-04-16 12:11:33 +00:00
committed by intellij-monorepo-bot
parent 97e363c243
commit dedef74304
5 changed files with 28 additions and 5 deletions
@@ -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
}
}
@@ -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) {
@@ -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 {
@@ -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
}
}
@@ -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<AnAction> {
if (e == null) return AnAction.EMPTY_ARRAY