mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
when closing floating editor, close all copies of all open files (IDEA-80361)
This commit is contained in:
+1
-1
@@ -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) {
|
||||
|
||||
+3
-24
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user