diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java index 3809431c21f8..13336358620b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java @@ -214,7 +214,7 @@ public class DebuggerPanelsManager implements ProjectComponent { public void toFront(DebuggerSession session) { DebuggerSessionTab sessionTab = getSessionTab(session); if (sessionTab != null) { - sessionTab.toFront(); + sessionTab.toFront(true); } } 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 897d169e1845..821d9dbd6bc3 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 @@ -1271,6 +1271,17 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac return null; } + @Nullable + public void restoreContent(final String key) { + for (AnAction action : myMinimizedViewActions.getChildren(null)) { + Content content = ((RestoreViewAction)action).getContent(); + if (key.equals(content.getUserData(ViewImpl.ID))) { + action.actionPerformed(null); + return; + } + } + } + public void setToDisposeRemovedContent(final boolean toDispose) { myToDisposeRemovedContent = toDispose; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index 006ce2162ed2..f44d5a16b163 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -713,7 +713,7 @@ public class XDebugSessionImpl implements XDebugSession { UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { - mySessionTab.toFront(); + mySessionTab.toFront(true); mySessionTab.getUi().attractBy(XDebuggerUIConstants.LAYOUT_VIEW_BREAKPOINT_CONDITION); } }); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java index 2273ab698768..bee9b3d91fd7 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java @@ -33,6 +33,7 @@ import com.intellij.xdebugger.impl.XDebuggerUtilImpl; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager; +import com.intellij.xdebugger.impl.ui.XDebugSessionTab; import com.intellij.xdebugger.impl.ui.XDebuggerEditorBase; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel; @@ -138,7 +139,11 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { // add to watches XExpression expression = myInputComponent.getInputEditor().getExpression(); if (!XDebuggerUtilImpl.isEmptyExpression(expression)) { - ((XDebugSessionImpl)mySession).getSessionTab().getWatchesView().addWatchExpression(expression, -1, false); + XDebugSessionTab tab = ((XDebugSessionImpl)mySession).getSessionTab(); + if (tab != null) { + tab.getWatchesView().addWatchExpression(expression, -1, true); + requestFocusInEditor(); + } } } } @@ -195,7 +200,11 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { setTitle(myInputComponent.getTitle()); mySwitchModeAction.putValue(Action.NAME, getSwitchButtonText(mode)); - final JComponent preferredFocusedComponent = myInputComponent.getInputEditor().getPreferredFocusedComponent(); + requestFocusInEditor(); + } + + private void requestFocusInEditor() { + JComponent preferredFocusedComponent = myInputComponent.getInputEditor().getPreferredFocusedComponent(); if (preferredFocusedComponent != null) { IdeFocusManager.getInstance(mySession.getProject()).requestFocus(preferredFocusedComponent, true); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java index 5183877b2a9a..68ad37025f63 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java @@ -15,6 +15,8 @@ */ package com.intellij.xdebugger.impl.frame; +import com.intellij.debugger.ui.DebuggerContentInfo; +import com.intellij.execution.ui.layout.impl.RunnerContentUi; import com.intellij.ide.DataManager; import com.intellij.ide.dnd.DnDEvent; import com.intellij.ide.dnd.DnDManager; @@ -36,6 +38,7 @@ import com.intellij.xdebugger.frame.XStackFrame; import com.intellij.xdebugger.impl.XDebugSessionImpl; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; +import com.intellij.xdebugger.impl.ui.XDebugSessionTab; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeRestorer; @@ -216,6 +219,24 @@ public class XWatchesViewImpl implements DnDNativeTarget, XWatchesView, XDebugVi public void addWatchExpression(@NotNull XExpression expression, int index, final boolean navigateToWatchNode) { myRootNode.addWatchExpression(mySession.getDebugProcess().getEvaluator(), expression, index, navigateToWatchNode); updateSessionData(); + if (navigateToWatchNode) { + showWatchesTab(); + } + } + + private void showWatchesTab() { + XDebugSessionTab tab = mySession.getSessionTab(); + if (tab != null) { + tab.toFront(false); + // restore watches tab if minimized + JComponent component = tab.getUi().getComponent(); + if (component instanceof DataProvider) { + RunnerContentUi ui = RunnerContentUi.KEY.getData(((DataProvider)component)); + if (ui != null) { + ui.restoreContent(DebuggerContentInfo.WATCHES_CONTENT); + } + } + } } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java index 57b2e9d505e1..2134c0c8d4e1 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java @@ -151,19 +151,21 @@ public abstract class DebuggerSessionTabBase extends LogConsoleManagerBase imple return environment != null ? environment.getRunProfile() : null; } - public void toFront() { + public void toFront(boolean focus) { if (!ApplicationManager.getApplication().isUnitTestMode()) { ExecutionManager.getInstance(getProject()).getContentManager().toFrontRunContent(DefaultDebugExecutor.getDebugExecutorInstance(), myRunContentDescriptor); - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - boolean focusWnd = Registry.is("debugger.mayBringFrameToFrontOnBreakpoint"); - ProjectUtil.focusProjectWindow(getProject(), focusWnd); - if (!focusWnd) { - AppIcon.getInstance().requestAttention(getProject(), true); + if (focus) { + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + boolean focusWnd = Registry.is("debugger.mayBringFrameToFrontOnBreakpoint"); + ProjectUtil.focusProjectWindow(getProject(), focusWnd); + if (!focusWnd) { + AppIcon.getInstance().requestAttention(getProject(), true); + } } - } - }); + }); + } } } }