diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/InlayRunToCursorEditorListener.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/InlayRunToCursorEditorListener.kt index 34e83cd6d006..f9d1afbf700c 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/InlayRunToCursorEditorListener.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/InlayRunToCursorEditorListener.kt @@ -100,7 +100,7 @@ class InlayRunToCursorEditorListener(private val project: Project, private val c return true } - if (editor.getEditorKind() != EditorKind.MAIN_EDITOR) { + if (editor.getEditorKind() != EditorKind.MAIN_EDITOR && e != null) { return true } val session = XDebuggerManager.getInstance(project).getCurrentSession() as XDebugSessionImpl? @@ -109,7 +109,7 @@ class InlayRunToCursorEditorListener(private val project: Project, private val c return true } IntentionsUIImpl.DISABLE_INTENTION_BULB[project] = true - val lineNumber = if (e != null) XDebuggerManagerImpl.getLineNumber(e) else lineFromCurrentMouse(editor) + val lineNumber = if (e != null) XDebuggerManagerImpl.getLineNumber(e) else lineFromCurrentMouse(editor) ?: return false if (lineNumber < 0) { return true } @@ -122,10 +122,15 @@ class InlayRunToCursorEditorListener(private val project: Project, private val c return true } - private fun lineFromCurrentMouse(editor: Editor): Int { + private fun lineFromCurrentMouse(editor: Editor): Int? { val location = MouseInfo.getPointerInfo().location SwingUtilities.convertPointFromScreen(location, editor.getContentComponent()) + val editorGutterComponentEx = editor.gutter as? EditorGutterComponentEx ?: return null + if (!editor.getContentComponent().bounds.contains(location) && !editorGutterComponentEx.bounds.contains(location)) { + return null + } + val logicalPosition: LogicalPosition = editor.xyToLogicalPosition(location) if (logicalPosition.line >= editor.document.getLineCount()) { return -1 diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java index 1fb97838f8f0..e4b57fb05632 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java @@ -36,6 +36,7 @@ import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileDocumentManagerListener; +import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.vfs.VirtualFile; @@ -47,10 +48,7 @@ import com.intellij.ui.awt.RelativePoint; import com.intellij.util.DocumentUtil; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.UIUtil; -import com.intellij.xdebugger.XDebugProcess; -import com.intellij.xdebugger.XDebugProcessStarter; -import com.intellij.xdebugger.XDebugSession; -import com.intellij.xdebugger.XDebuggerManager; +import com.intellij.xdebugger.*; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.breakpoints.XBreakpointListener; import com.intellij.xdebugger.impl.actions.XDebuggerActions; @@ -294,6 +292,21 @@ public final class XDebuggerManagerImpl extends XDebuggerManager implements Pers session.init(process, contentToReuse); + if (!ApplicationManager.getApplication().isHeadlessEnvironment()) { + session.addSessionListener(new XDebugSessionListener() { + @Override + public void sessionPaused() { + ApplicationManager.getApplication().invokeLater(() -> { + Editor editor = FileEditorManager.getInstance(myProject).getSelectedTextEditor(); + if (editor == null) { + return; + } + myNewRunToCursorListener.reshowInlayRunToCursor(editor); + }); + } + }); + } + mySessions.put(session.getDebugProcess().getProcessHandler(), session); return session;