mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[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:
committed by
intellij-monorepo-bot
parent
22b4e7cc74
commit
5fda9535ef
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user