diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/IntentionsPopup.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/IntentionsPopup.kt index 650c14f..82117dc 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/IntentionsPopup.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/IntentionsPopup.kt @@ -5,23 +5,19 @@ import com.intellij.codeInsight.hint.HintManager import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler import com.intellij.lang.LangBundle import com.intellij.openapi.editor.Editor -import com.intellij.openapi.editor.ScrollType import com.intellij.openapi.project.Project import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile import com.intellij.psi.util.PsiUtilBase internal object IntentionsPopup { - fun showAt(editor: Editor, offset: Int) { - editor.caretModel.moveToOffset(offset) - editor.scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE) - - if (!tryShowPopup(editor)) { - HintManager.getInstance().showInformationHint(editor, LangBundle.message("hint.text.no.context.actions.available.at.this.location")); + fun show(editor: Editor) { + if (!tryShow(editor)) { + HintManager.getInstance().showInformationHint(editor, LangBundle.message("hint.text.no.context.actions.available.at.this.location")) } } - private fun tryShowPopup(editor: Editor): Boolean { + private fun tryShow(editor: Editor): Boolean { val project = editor.project ?: return false val file = PsiUtilBase.getPsiFileInEditor(editor, project) ?: return false diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt index 9b4e10c..befd317 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt @@ -6,6 +6,7 @@ import com.intellij.codeInsight.daemon.impl.HintRenderer import com.intellij.codeInsight.hints.presentation.InputHandler import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Inlay +import com.intellij.openapi.editor.ScrollType import com.intellij.openapi.editor.colors.EditorFontType import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.editor.impl.EditorImpl @@ -107,12 +108,20 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) } override fun mousePressed(event: MouseEvent, translated: Point) { - if (!SwingUtilities.isLeftMouseButton(event) || !isHoveringText(translated)) { + if (!isHoveringText(translated)) { return } - event.consume() - IntentionsPopup.showAt(inlay.editor, info.actualStartOffset) + if (SwingUtilities.isLeftMouseButton(event) || SwingUtilities.isMiddleMouseButton(event)) { + event.consume() + + val editor = inlay.editor + moveToOffset(editor, info.actualStartOffset) + + if (SwingUtilities.isLeftMouseButton(event)) { + IntentionsPopup.show(editor) + } + } } private fun isHoveringText(point: Point): Boolean { @@ -167,5 +176,10 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) private fun fixBaselineForTextRendering(rect: Rectangle) { rect.y += 1 } + + private fun moveToOffset(editor: Editor, offset: Int) { + editor.caretModel.moveToOffset(offset) + editor.scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE) + } } }