summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java57
1 files changed, 47 insertions, 10 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
index 860ba3211c4b..3519ab6a1af4 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
@@ -264,11 +264,11 @@ public class EditorWindow {
}
public void closeFile(final VirtualFile file) {
- closeFile (file, true);
+ closeFile(file, true);
}
- public void closeFile(final VirtualFile file, final boolean unsplit) {
- closeFile(file, unsplit, true);
+ public void closeFile(final VirtualFile file, final boolean disposeIfNeeded) {
+ closeFile(file, disposeIfNeeded, true);
}
public boolean hasClosedTabs() {
@@ -286,7 +286,7 @@ public class EditorWindow {
}
}
- public void closeFile(final VirtualFile file, final boolean unsplit, final boolean transferFocus) {
+ public void closeFile(final VirtualFile file, final boolean disposeIfNeeded, final boolean transferFocus) {
final FileEditorManagerImpl editorManager = getManager();
editorManager.runChange(new FileEditorManagerChange() {
@Override
@@ -317,13 +317,15 @@ public class EditorWindow {
}
}
- if (unsplit && getTabCount() == 0) {
- unsplit (true);
+ if (disposeIfNeeded && getTabCount() == 0) {
+ removeFromSplitter();
}
- myPanel.revalidate ();
- if (myTabbedPane == null) {
- // in tabless mode
- myPanel.repaint();
+ else {
+ myPanel.revalidate();
+ if (myTabbedPane == null) {
+ // in tabless mode
+ myPanel.repaint();
+ }
}
}
finally {
@@ -347,6 +349,39 @@ public class EditorWindow {
}, myOwner);
}
+ private void removeFromSplitter() {
+ if (!inSplitter()) return;
+
+ if (myOwner.getCurrentWindow() == this) {
+ EditorWindow[] siblings = findSiblings();
+ myOwner.setCurrentWindow(siblings[0], false);
+ }
+
+ Splitter splitter = (Splitter)myPanel.getParent();
+ JComponent otherComponent = splitter.getOtherComponent(myPanel);
+
+ Container parent = splitter.getParent().getParent();
+ if (parent instanceof Splitter) {
+ Splitter parentSplitter = (Splitter)parent;
+ if (parentSplitter.getFirstComponent() == splitter.getParent()) {
+ parentSplitter.setFirstComponent(otherComponent);
+ }
+ else {
+ parentSplitter.setSecondComponent(otherComponent);
+ }
+ }
+ else if (parent instanceof EditorsSplitters) {
+ parent.removeAll();
+ parent.add(otherComponent, BorderLayout.CENTER);
+ ((JComponent)parent).revalidate();
+ }
+ else {
+ throw new IllegalStateException("Unknown container: " + parent);
+ }
+
+ dispose();
+ }
+
private int calcIndexToSelect(VirtualFile fileBeingClosed, final int fileIndex) {
final int currentlySelectedIndex = myTabbedPane.getSelectedIndex();
if (currentlySelectedIndex != fileIndex) {
@@ -503,6 +538,8 @@ public class EditorWindow {
public void requestFocus(boolean forced) {
if (myTabbedPane != null) {
myTabbedPane.requestFocus(forced);
+ } else {
+ IdeFocusManager.findInstanceByComponent(myPanel).requestFocus(myPanel, forced);
}
}