diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/DockableEditorTabbedContainer.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/DockableEditorTabbedContainer.java index 2eacfab54920..f2c24a9de973 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/DockableEditorTabbedContainer.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/DockableEditorTabbedContainer.java @@ -196,7 +196,7 @@ public class DockableEditorTabbedContainer implements DockContainer.Persistent { } public void close(VirtualFile file) { - mySplitters.getCurrentWindow().closeFile(file); + mySplitters.closeFile(file, false); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java index 776e61846800..d64dd34acb6c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java @@ -586,6 +586,31 @@ public class EditorsSplitters extends JPanel { return null; } + void closeFile(VirtualFile file, boolean moveFocus) { + final List windows = findWindows(file); + if (!windows.isEmpty()) { + final VirtualFile nextFile = findNextFile(file); + for (final EditorWindow window : windows) { + LOG.assertTrue(window.getSelectedEditor() != null); + window.closeFile(file, false, moveFocus); + if (window.getTabCount() == 0 && nextFile != null) { + EditorWithProviderComposite newComposite = myManager.newEditorComposite(nextFile); + window.setEditor(newComposite, moveFocus); // newComposite can be null + } + } + // cleanup windows with no tabs + for (final EditorWindow window : windows) { + if (window.isDisposed()) { + // call to window.unsplit() which might make its sibling disposed + continue; + } + if (window.getTabCount() == 0) { + window.unsplit(false); + } + } + } + } + private final class MyFocusTraversalPolicy extends IdeFocusTraversalPolicy { public final Component getDefaultComponentImpl(final Container focusCycleRoot) { if (myCurrentWindow != null) { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 582716f561ed..f1881c6cb742 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -556,33 +556,12 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec assertDispatchThread(); runChange(new FileEditorManagerChange() { public void run(EditorsSplitters splitters) { - final List windows = splitters.findWindows(file); - if (!windows.isEmpty()) { - final VirtualFile nextFile = splitters.findNextFile(file); - for (final EditorWindow window : windows) { - LOG.assertTrue(window.getSelectedEditor() != null); - window.closeFile(file, false, moveFocus); - if (window.getTabCount() == 0 && nextFile != null) { - EditorWithProviderComposite newComposite = newEditorComposite(nextFile); - window.setEditor(newComposite, moveFocus); // newComposite can be null - } - } - // cleanup windows with no tabs - for (final EditorWindow window : windows) { - if (window.isDisposed()) { - // call to window.unsplit() which might make its sibling disposed - continue; - } - if (window.getTabCount() == 0) { - window.unsplit(false); - } - } - } + splitters.closeFile(file, moveFocus); } }, closeAllCopies ? null : getActiveSplitters(true).getResult()); } -//-------------------------------------- Open File ---------------------------------------- + //-------------------------------------- Open File ---------------------------------------- @NotNull public Pair openFileWithProviders(@NotNull final VirtualFile file, @@ -865,7 +844,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec @Nullable - private EditorWithProviderComposite newEditorComposite(final VirtualFile file) { + EditorWithProviderComposite newEditorComposite(final VirtualFile file) { if (file == null) { return null; }