[switcher] IJPL-195100 Show all editors for a single file in the switcher model if there are more than 1, otherwise show recent files

(cherry picked from commit f89257bd79a7f6c3f8055fe296dbc192371a818b)

IJ-CR-168979

GitOrigin-RevId: ab778f44be5aa453428c7e7ca405fb3594c7afba
This commit is contained in:
Nikita Katkov
2025-07-11 16:20:17 +02:00
committed by intellij-monorepo-bot
parent 22b4e7cc74
commit 5fda9535ef
3 changed files with 10 additions and 8 deletions

View File

@@ -20,10 +20,13 @@ private class RecentlySelectedEditorListener : FileEditorManagerListener {
}
override fun fileClosed(source: FileEditorManager, file: VirtualFile) {
thisLogger().trace { "Remove closed frontend file from model: ${file.name}" }
thisLogger().trace { "Maybe remove closed frontend file from model: ${file.name}" }
val frontendRecentFilesModel = FrontendRecentFilesModel.getInstance(source.project)
frontendRecentFilesModel.applyFrontendChanges(RecentFileKind.RECENTLY_OPENED_UNPINNED, listOf(file), FileChangeKind.REMOVED)
}
if (source.getEditors(file).isEmpty()) {
thisLogger().trace { "Do remove closed frontend file from model: ${file.name}" }
frontendRecentFilesModel.applyFrontendChanges(RecentFileKind.RECENTLY_OPENED_UNPINNED, listOf(file), FileChangeKind.REMOVED)
}
}
override fun selectionChanged(event: FileEditorManagerEvent) {
val file = event.newFile ?: return

View File

@@ -43,9 +43,8 @@ internal class FrontendRecentFilesMutableState(project: Project) : RecentFilesMu
// If there is only one opened file, users will benefit more from the entire _recently opened_ files list
val capturedSwitcherModelState = recentlyOpenedPinnedFilesState.value.entries
when {
capturedSwitcherModelState.isEmpty() -> recentlyOpenedFilesState
capturedSwitcherModelState.size == 1 && isSingleFileOpenedInMultipleEditors(capturedSwitcherModelState.single().virtualFile) -> recentlyOpenedPinnedFilesState
capturedSwitcherModelState.size == 1 -> recentlyOpenedFilesState
capturedSwitcherModelState.isEmpty() || capturedSwitcherModelState.size == 1 -> recentlyOpenedFilesState
else -> recentlyOpenedPinnedFilesState
}
}
@@ -54,7 +53,7 @@ internal class FrontendRecentFilesMutableState(project: Project) : RecentFilesMu
private fun isSingleFileOpenedInMultipleEditors(file: VirtualFile?): Boolean {
if (file == null) return false
return FileEditorManager.getInstance(project).getEditors(file).size == 1
return FileEditorManager.getInstance(project).getAllEditors(file).size > 1
}
}

View File

@@ -95,7 +95,7 @@ internal fun closeEditorForFile(selectedFile: SwitcherVirtualFile, project: Proj
val virtualFile = selectedFile.virtualFile ?: return true
val fileEditorManager = FileEditorManager.getInstance(project) as FileEditorManagerImpl
val maybePreservedItemWindow = null
val maybePreservedItemWindow = selectedFile.editorWindow
val window = findAppropriateWindow(maybePreservedItemWindow)
if (window == null) {
fileEditorManager.closeFile(virtualFile, false, false)
@@ -104,5 +104,5 @@ internal fun closeEditorForFile(selectedFile: SwitcherVirtualFile, project: Proj
fileEditorManager.closeFile(virtualFile, window)
}
return fileEditorManager.getEditors(virtualFile).isEmpty()
return fileEditorManager.getAllEditors(virtualFile).isEmpty()
}