From 4fbb6b8662de988cce96028b9ee612e1ba3f9b4f Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Tue, 31 Jan 2012 17:52:14 +0400 Subject: [PATCH] IDEA-80597 Debug tool window: generic UI: detaching a tab with hidden view shows both the view and its icon IDEA-80595 Debug tool window: if Debugger view is split into separate views, and either Frames or Threads view is hidden, "Restore layout" completely breaks layout --- .../ui/layout/actions/RestoreViewAction.java | 4 ++ .../ui/layout/impl/GridCellImpl.java | 3 +- .../ui/layout/impl/RunnerContentUi.java | 39 +++++++++++-------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/actions/RestoreViewAction.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/actions/RestoreViewAction.java index 414d2d45c927..5387f12c6995 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/actions/RestoreViewAction.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/actions/RestoreViewAction.java @@ -43,4 +43,8 @@ public class RestoreViewAction extends AnAction { public void actionPerformed(final AnActionEvent e) { myRestoreAction.restoreInGrid(); } + + public Content getContent() { + return myContent; + } } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java index 8fcbbed3abb3..1350d5fa0468 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java @@ -451,8 +451,7 @@ public class GridCellImpl implements GridCell { private ActionCallback restore(Content content) { myMinimizedContents.remove(content); - add(content); - updateSelection(myTabs.getComponent().getRootPane() != null); + myContext.getContentManager().addContent(content); return new ActionCallback.Done(); } } 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 a9e9c25d5d21..e31d8a32d3cd 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 @@ -432,12 +432,6 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac public void add(DockableContent dockable, RelativePoint dropTarget) { final DockableGrid dockableGrid = (DockableGrid)dockable; final RunnerContentUi prev = dockableGrid.getRunnerUi(); - if (prev == this) { - for (TabInfo info : myTabs.getTabs()) { - info.setHidden(false); - } - return; - } saveUiState(); @@ -453,7 +447,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac if (view.isMinimizedInGrid()) continue; prev.myManager.removeContent(content, false); myManager.removeContent(content, false); - if (hadGrid && contents.size() == 1 && !wasRestoring) { + if (hadGrid && !wasRestoring) { view.assignTab(getTabFor(getSelectedGrid())); view.setPlaceInGrid(myLayoutSettings.getDefaultGridPlace(content)); } else if (contents.size() == 1 && !wasRestoring) { @@ -586,7 +580,6 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac updateTabsUI(false); - event.getContent().addPropertyChangeListener(RunnerContentUi.this); fireContentOpened(event.getContent()); } @@ -836,8 +829,14 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac } } + tab.setHidden(true); + for (Content content : contents) { + if (!grid.isMinimized(content)) { + tab.setHidden(false); + break; + } + } if (icon == null && contents.size() == 1) { - tab.setHidden(grid.isMinimized(contents.get(0))); icon = contents.get(0).getIcon(); } @@ -1031,6 +1030,10 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac for (RunnerContentUi child : children) { Collections.addAll(contents, child.myManager.getContents()); } + for (AnAction action : myMinimizedViewActions.getChildren(null)) { + final Content content = ((RestoreViewAction)action).getContent(); + contents.add(content); + } Content[] all = contents.toArray(new Content[contents.size()]); Arrays.sort(all, new Comparator() { @Override @@ -1290,16 +1293,20 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac public void minimize(final Content content, final CellTransform.Restore restore) { final Ref restoreAction = new Ref(); + myManager.removeContent(content, false); restoreAction.set(new RestoreViewAction(content, new CellTransform.Restore() { public ActionCallback restoreInGrid() { myMinimizedViewActions.remove(restoreAction.get()); - return restore.restoreInGrid().doWhenDone(new Runnable() { - public void run() { - saveUiState(); - select(content, true); - updateTabsUI(false); - } - }); + final GridImpl grid = getGridFor(content, false); + if (grid == null) { + getStateFor(content).assignTab(myLayoutSettings.getOrCreateTab(-1)); + } + getStateFor(content).setMinimizedInGrid(false); + myManager.addContent(content); + saveUiState(); + select(content, true); + updateTabsUI(false); + return new ActionCallback.Done(); } }));