From e0ff96dc2cbc9878bd19b7977faf905d7763b13a Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Sun, 10 Nov 2013 19:37:02 +0100 Subject: [PATCH] DockableEditorTabbedContainer shouldn't return root pane as accept area as it makes impossible to add any other dockable container. It is better to return root pane in the special fallback method after we checked all containers. --- .../ui/layout/impl/RunnerContentUi.java | 5 ++ .../FavoritesTreeViewPanel.java | 5 ++ .../intellij/ui/docking/DockContainer.java | 5 ++ .../impl/DockableEditorTabbedContainer.java | 4 ++ .../ui/docking/impl/DockManagerImpl.java | 7 +++ .../plugins/terminal/TerminalView.java | 47 ++++++++++--------- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java index 6bd3eb49d1bd..0ee9c952f9d1 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java @@ -449,6 +449,11 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac return new RelativeRectangle(myTabs.getComponent()); } + @Override + public RelativeRectangle getAcceptAreaFallback() { + return getAcceptArea(); + } + @NotNull @Override public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) { diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java index 1dd80ac7477e..f97eb9e2a8df 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java @@ -796,6 +796,11 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider, Dock return new RelativeRectangle(myTree); } + @Override + public RelativeRectangle getAcceptAreaFallback() { + return getAcceptArea(); + } + @NotNull @Override public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) { diff --git a/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java b/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java index 5d26e4cebc99..d2201cd08849 100644 --- a/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java +++ b/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java @@ -33,6 +33,11 @@ public interface DockContainer extends Disposable, Activatable { RelativeRectangle getAcceptArea(); + /** + * This area is used when nothing was found with getAcceptArea + */ + RelativeRectangle getAcceptAreaFallback(); + @NotNull ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point); 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 e48da04150f3..4da325b7f750 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 @@ -88,6 +88,10 @@ public class DockableEditorTabbedContainer implements DockContainer.Persistent { @Override public RelativeRectangle getAcceptArea() { + return new RelativeRectangle(mySplitters); + } + + public RelativeRectangle getAcceptAreaFallback() { JRootPane root = mySplitters.getRootPane(); return root != null ? new RelativeRectangle(root) : new RelativeRectangle(mySplitters); } diff --git a/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java b/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java index 0676031f81d8..73461ddb7fd4 100644 --- a/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java @@ -346,6 +346,13 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo } } + for (DockContainer each : myContainers) { + RelativeRectangle rec = each.getAcceptAreaFallback(); + if (rec.contains(point) && each.getContentResponse(content, point).canAccept()) { + return each; + } + } + return null; } diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java index b6c39711d8b1..e6ecc58ea9ee 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java @@ -252,27 +252,32 @@ public class TerminalView { */ public class TerminalDockContainer implements DockContainer { private ToolWindow myTerminalToolWindow; - + public TerminalDockContainer(ToolWindow toolWindow) { myTerminalToolWindow = toolWindow; } - + @Override public RelativeRectangle getAcceptArea() { return new RelativeRectangle(myTerminalToolWindow.getComponent()); } - + + @Override + public RelativeRectangle getAcceptAreaFallback() { + return getAcceptArea(); + } + @NotNull @Override public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) { return ContentResponse.ACCEPT_MOVE; } - + @Override public JComponent getContainerComponent() { return myTerminalToolWindow.getComponent(); } - + @Override public void add(@NotNull DockableContent content, RelativePoint dropTarget) { if (content.getKey() instanceof TerminalSessionVirtualFileImpl) { @@ -280,57 +285,57 @@ public class TerminalView { myTerminalWidget.addTab(terminalFile.getName(), terminalFile.getTerminal()); } } - + @Override public void closeAll() { - + } - + @Override public void addListener(Listener listener, Disposable parent) { - + } - + @Override public boolean isEmpty() { return false; } - + @Nullable @Override public Image startDropOver(@NotNull DockableContent content, RelativePoint point) { return null; } - + @Nullable @Override public Image processDropOver(@NotNull DockableContent content, RelativePoint point) { return null; } - + @Override public void resetDropOver(@NotNull DockableContent content) { - + } - + @Override public boolean isDisposeWhenEmpty() { return false; } - + @Override public void showNotify() { - + } - + @Override public void hideNotify() { - + } - + @Override public void dispose() { - + } } }