diff --git a/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java b/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java index cbbefa51e72b..8a9dc35f531b 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java @@ -737,6 +737,7 @@ public class Switcher extends AnAction implements DumbAware { final FileEditorManagerImpl editorManager = (FileEditorManagerImpl)FileEditorManager.getInstance(project); final ArrayList filesData = new ArrayList<>(); final ArrayList editors = new ArrayList<>(); + LinkedHashSet addedFiles = new LinkedHashSet<>(); if (!pinned) { for (Pair pair : editorManager.getSelectionHistory()) { editors.add(new FileInfo(pair.first, pair.second, project)); @@ -744,7 +745,10 @@ public class Switcher extends AnAction implements DumbAware { } if (editors.size() < 2 || pinned) { if (pinned && editors.size() > 1) { - filesData.addAll(editors); + for (FileInfo fileInfo : editors) { + if (addedFiles.add(fileInfo.first)) + filesData.add(fileInfo); + } } int maxFiles = Math.max(editors.size(), filesForInit.size()); int minIndex = pinned ? 0 : (filesForInit.size() - Math.min(toolWindowsCount, maxFiles)); @@ -770,20 +774,26 @@ public class Switcher extends AnAction implements DumbAware { } } if (add) { - filesData.add(info); - if (!firstRecentMarked && !info.first.equals(currentFile)) { - selectionIndex = filesData.size() - 1; - firstRecentMarked = true; + if (addedFiles.add(info.first)) { + filesData.add(info); + if (!firstRecentMarked && !info.first.equals(currentFile)) { + selectionIndex = filesData.size() - 1; + firstRecentMarked = true; + } } } } //if (editors.size() == 1) selectionIndex++; if (editors.size() == 1 && (filesData.isEmpty() || !editors.get(0).getFirst().equals(filesData.get(0).getFirst()))) { - filesData.add(0, editors.get(0)); + if (addedFiles.add(editors.get(0).first)) { + filesData.add(0, editors.get(0)); + } } } else { for (int i = 0; i < Math.min(30, editors.size()); i++) { - filesData.add(editors.get(i)); + if (addedFiles.add(editors.get(i).first)) { + filesData.add(editors.get(i)); + } } } @@ -1176,6 +1186,9 @@ public class Switcher extends AnAction implements DumbAware { @Nullable private static EditorWindow findAppropriateWindow(@NotNull FileInfo info) { if (info.second == null) return null; + if (UISettings.getInstance().getEditorTabPlacement() == UISettings.TABS_NONE) { + return info.second.getOwner().getCurrentWindow(); + } final EditorWindow[] windows = info.second.getOwner().getWindows(); return ArrayUtil.contains(info.second, windows) ? info.second : windows.length > 0 ? windows[0] : null; }