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 56a001ccb974..57b707b54947 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/Switcher.java @@ -661,48 +661,67 @@ public class Switcher extends AnAction implements DumbAware { } private void closeTabOrToolWindow() { - final Object value = getSelectedList().getSelectedValue(); - if (value instanceof FileInfo) { - final FileInfo info = (FileInfo)value; - final VirtualFile virtualFile = info.first; - final FileEditorManagerImpl editorManager = ((FileEditorManagerImpl)FileEditorManager.getInstance(project)); - final JList jList = getSelectedList(); - final EditorWindow wnd = findAppropriateWindow(info); - if (wnd == null) { - editorManager.closeFile(virtualFile, false, false); - } else { - editorManager.closeFile(virtualFile, wnd, false); - } - final int selectedIndex = jList.getSelectedIndex(); - final IdeFocusManager focusManager = IdeFocusManager.getInstance(project); - myAlarm.addRequest(new Runnable() { - @Override - public void run() { - focusManager.requestFocus(SwitcherPanel.this, true); + final int[] selected = getSelectedList().getSelectedIndices(); + Arrays.sort(selected); + int selectedIndex = 0; + for (int i = selected.length - 1; i>=0; i--) { + selectedIndex = selected[i]; + Object value = getSelectedList().getModel().getElementAt(selectedIndex); + if (value instanceof FileInfo) { + final FileInfo info = (FileInfo)value; + final VirtualFile virtualFile = info.first; + final FileEditorManagerImpl editorManager = ((FileEditorManagerImpl)FileEditorManager.getInstance(project)); + final JList jList = getSelectedList(); + final EditorWindow wnd = findAppropriateWindow(info); + if (wnd == null) { + editorManager.closeFile(virtualFile, false, false); + } + else { + editorManager.closeFile(virtualFile, wnd, false); + } + + final IdeFocusManager focusManager = IdeFocusManager.getInstance(project); + myAlarm.cancelAllRequests(); + myAlarm.addRequest(new Runnable() { + @Override + public void run() { + focusManager.requestFocus(SwitcherPanel.this, true); + } + }, 300); + if (jList.getModel().getSize() == 1) { + goLeft(); + removeElementAt(jList, selectedIndex); + this.remove(jList); + this.remove(separator); + final Dimension size = toolWindows.getSize(); + myPopup.setSize(new Dimension(size.width, myPopup.getSize().height)); + } + else { + removeElementAt(jList, selectedIndex); + jList.setSize(jList.getPreferredSize()); + } + if (isPinnedMode()) { + EditorHistoryManager.getInstance(project).removeFile(virtualFile); } - }, 300); - if (jList.getModel().getSize() == 1) { - goLeft(); - removeElementAt(jList, selectedIndex); - this.remove(jList); - this.remove(separator); - final Dimension size = toolWindows.getSize(); - myPopup.setSize(new Dimension(size.width, myPopup.getSize().height)); - } else { - goForward(); - removeElementAt(jList, selectedIndex); - jList.setSize(jList.getPreferredSize()); } - pack(); - } else if (value instanceof ToolWindow) { - final ToolWindow toolWindow = (ToolWindow)value; - if (twManager instanceof ToolWindowManagerImpl) { - ToolWindowManagerImpl manager = (ToolWindowManagerImpl)twManager; - manager.hideToolWindow(ids.get(toolWindow), false, false); - } else { - toolWindow.hide(null); + else if (value instanceof ToolWindow) { + final ToolWindow toolWindow = (ToolWindow)value; + if (twManager instanceof ToolWindowManagerImpl) { + ToolWindowManagerImpl manager = (ToolWindowManagerImpl)twManager; + manager.hideToolWindow(ids.get(toolWindow), false, false); + } + else { + toolWindow.hide(null); + } } } + pack(); + myPopup.getContent().revalidate(); + myPopup.getContent().repaint(); + if (getSelectedList().getModel().getSize() > selectedIndex) { + getSelectedList().setSelectedIndex(selectedIndex); + getSelectedList().ensureIndexIsVisible(selectedIndex); + } } private static void removeElementAt(JList jList, int index) {