when closing floating editor, close all copies of all open files (IDEA-80361)

This commit is contained in:
Dmitry Jemerov
2012-01-26 16:08:44 +01:00
parent 3ebdd60444
commit 13ce2b999a
3 changed files with 29 additions and 25 deletions
@@ -196,7 +196,7 @@ public class DockableEditorTabbedContainer implements DockContainer.Persistent {
}
public void close(VirtualFile file) {
mySplitters.getCurrentWindow().closeFile(file);
mySplitters.closeFile(file, false);
}
@Override
@@ -586,6 +586,31 @@ public class EditorsSplitters extends JPanel {
return null;
}
void closeFile(VirtualFile file, boolean moveFocus) {
final List<EditorWindow> 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) {
@@ -556,33 +556,12 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
assertDispatchThread();
runChange(new FileEditorManagerChange() {
public void run(EditorsSplitters splitters) {
final List<EditorWindow> 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<FileEditor[], FileEditorProvider[]> 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;
}