From b1b266d0decf942c71bcee9c6653566bb257f783 Mon Sep 17 00:00:00 2001 From: Petr Surkov Date: Thu, 19 Oct 2023 15:28:40 +0200 Subject: [PATCH] [inline-completion] ML-1559 Fix multiple inline tooltips GitOrigin-RevId: 65de701d336719751abe2520db8b13e766f54f19 --- .../tooltip/InlineCompletionTooltip.kt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/tooltip/InlineCompletionTooltip.kt b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/tooltip/InlineCompletionTooltip.kt index b98566fbfba7..3e81215178cb 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/tooltip/InlineCompletionTooltip.kt +++ b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/tooltip/InlineCompletionTooltip.kt @@ -12,6 +12,7 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.Key import com.intellij.ui.LightweightHint import com.intellij.ui.dsl.builder.RightGap import com.intellij.ui.dsl.builder.panel @@ -20,9 +21,13 @@ import com.intellij.util.concurrency.annotations.RequiresEdt import com.intellij.util.ui.JBUI internal object InlineCompletionTooltip { + private val tooltipKey = Key("EDITOR_HAS_INLINE_TOOLTIP") @RequiresEdt fun enterHover(session: InlineCompletionSession) { val editor = session.context.editor + if (tooltipKey.isIn(editor)) { + return + } val activeLookup = LookupManager.getActiveLookup(editor) if (activeLookup?.isPositionedAboveCaret == true) { @@ -54,8 +59,12 @@ internal object InlineCompletionTooltip { setForceShowAsPopup(true) } - val pos = editor.offsetToLogicalPosition(editor.caretModel.offset) - val location = HintManagerImpl.getHintPosition(hint, editor, pos, HintManager.ABOVE) + val location = HintManagerImpl.getHintPosition( + hint, + editor, + editor.offsetToLogicalPosition(editor.caretModel.offset), + HintManager.ABOVE + ) location.y -= panel.preferredHeight HintManagerImpl.getInstanceImpl().showEditorHint( @@ -67,6 +76,11 @@ internal object InlineCompletionTooltip { false, HintManagerImpl.createHintHint(editor, location, hint, HintManager.ABOVE).setContentActive(false) ) + editor.putUserData(tooltipKey, Unit) + hint.addHintListener { + // on hint hide + editor.putUserData(tooltipKey, null) + } Disposer.register(session) { hint.hide() }