From c53b0b87bc90c783a95c45cb85dcd1689d8ea9cc Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Mon, 7 May 2018 20:13:26 +0300 Subject: [PATCH] IDEA-55029 On breakpoint hit, cursor focus does not switch to breakpoint location --- .../com/intellij/ui/content/impl/ContentManagerImpl.java | 4 +--- .../src/com/intellij/xdebugger/impl/frame/XDebugView.java | 3 +++ .../com/intellij/xdebugger/impl/frame/XFramesView.java | 4 ++++ .../src/com/intellij/xdebugger/impl/frame/XThreadsView.kt | 2 ++ .../intellij/xdebugger/impl/frame/XVariablesViewBase.java | 4 ++++ .../com/intellij/xdebugger/impl/ui/XDebugSessionTab.java | 8 ++++---- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java index 45d408909fc3..66c0b48b7a4b 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java @@ -480,9 +480,7 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene addSelectedContent(content); - if (requestFocus) { - content.getComponent().transferFocus(); - } + requestFocus(content, forcedFocus); return ActionCallback.DONE; } }; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java index 113a78a3aa11..f8520eb3a8e3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java @@ -28,6 +28,7 @@ import com.intellij.xdebugger.XSourcePosition; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.awt.*; import java.util.EventObject; @@ -44,6 +45,8 @@ public abstract class XDebugView implements Disposable { myClearAlarm = new SingleAlarm(() -> clear(), VIEW_CLEAR_DELAY, this); } + abstract JComponent getDefaultFocusedComponent(); + protected final void requestClear() { myClearAlarm.cancelAndRequest(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java index 645af2c7f151..a48c34d22269 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java @@ -158,6 +158,10 @@ public class XFramesView extends XDebugView { myMainPanel.add(myThreadsPanel, BorderLayout.NORTH); } + public JComponent getDefaultFocusedComponent() { + return myFramesList; + } + private class ThreadsBuilder implements XSuspendContext.XExecutionStackContainer { private volatile boolean myObsolete; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt index 4c4bff2077c5..0a24c9f247dc 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt @@ -21,6 +21,8 @@ class XThreadsView(val project: Project, session: XDebugSessionImpl) : XDebugVie private fun getTree() = treePanel.tree fun getPanel() = treePanel.mainPanel + public override fun getDefaultFocusedComponent() = treePanel.tree + override fun clear() { DebuggerUIUtil.invokeLater { getTree().setRoot(object : XValueContainerNode(getTree(), null, true, object : XValueContainer() {}) {}, false) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java index a204a1080b0f..994574ac9297 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java @@ -63,6 +63,10 @@ public abstract class XVariablesViewBase extends XDebugView { DnDManager.getInstance().registerSource(myTreePanel, getTree()); } + public JComponent getDefaultFocusedComponent() { + return myTreePanel.getTree(); + } + protected void buildTreeAndRestoreState(@NotNull final XStackFrame stackFrame) { XSourcePosition position = stackFrame.getSourcePosition(); XDebuggerTree tree = getTree(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index 2835b7c6b80b..750314982fa4 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -191,7 +191,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { registerView(DebuggerContentInfo.VARIABLES_CONTENT, variablesView); Content result = myUi.createContent(DebuggerContentInfo.VARIABLES_CONTENT, variablesView.getPanel(), XDebuggerBundle.message("debugger.session.tab.variables.title"), - AllIcons.Debugger.Value, null); + AllIcons.Debugger.Value, variablesView.getDefaultFocusedComponent()); result.setCloseable(false); ActionGroup group = getCustomizedActionGroup(XDebuggerActions.VARIABLES_TREE_TOOLBAR_GROUP); @@ -203,7 +203,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { myWatchesView = new XWatchesViewImpl(session, myWatchesInVariables); registerView(DebuggerContentInfo.WATCHES_CONTENT, myWatchesView); Content watchesContent = myUi.createContent(DebuggerContentInfo.WATCHES_CONTENT, myWatchesView.getPanel(), - XDebuggerBundle.message("debugger.session.tab.watches.title"), AllIcons.Debugger.Watch, null); + XDebuggerBundle.message("debugger.session.tab.watches.title"), AllIcons.Debugger.Watch, myWatchesView.getDefaultFocusedComponent()); watchesContent.setCloseable(false); return watchesContent; } @@ -213,7 +213,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { XFramesView framesView = new XFramesView(myProject); registerView(DebuggerContentInfo.FRAME_CONTENT, framesView); Content framesContent = myUi.createContent(DebuggerContentInfo.FRAME_CONTENT, framesView.getMainPanel(), - XDebuggerBundle.message("debugger.session.tab.frames.title"), AllIcons.Debugger.Frame, null); + XDebuggerBundle.message("debugger.session.tab.frames.title"), AllIcons.Debugger.Frame, framesView.getDefaultFocusedComponent()); framesContent.setCloseable(false); return framesContent; } @@ -224,7 +224,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { registerView(DebuggerContentInfo.THREADS_CONTENT, stacksView); Content framesContent = myUi.createContent(DebuggerContentInfo.THREADS_CONTENT, stacksView.getPanel(), XDebuggerBundle.message("debugger.session.tab.threads.title"), AllIcons.Debugger.Threads, - null); + stacksView.getDefaultFocusedComponent()); framesContent.setCloseable(false); return framesContent; }