Hide balloon on mouse exit



I have an inlay which I am adding to the end of some line in the editor.

I would like to display a balloon or tooltip when the user hovers over this inlay and hide the balloon when the mouse exits the ballon and inlay (i.e. mouse is not hovering either).

I added a mouse listener to the editor so when the mouse is over my inlay I display a balloon. How can I make this balloon disappear on mouse exit? I can probably implement this myself with the mouse listener, but surely there's a better way?

This is how I'm creating the balloon:

this.balloon = JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder(hoverBinaryResponse.getMessage(),MessageType.INFO, null)
Disposer.register(this.balloon, () -> this.balloon = null);
this.balloon.show(new RelativePoint(mouseEvent),Balloon.Position.atRight);

I tried using an IdeToolTip but that didn't work either (not sure I used the right components):

final JLabel label = new JLabel("Tooltip");
final JEditorPane pane = initPane("tooltip text",
new HintHint(mouseEvent).setAwtTooltip(true),
final Wrapper wrapper = new Wrapper(pane);
this.ideTooltip = new IdeTooltip(editor.getComponent().getComponentAt(mouseEvent.getPoint()),
IdeTooltipManager.getInstance().show(this.ideTooltip, true);




I'm not sure. I'll take a look at it.



I tried:

HintManager.getInstance().showInformationHint(editor, text)

but the popup still closes only when I click outside it. I also tried:


with all sorts of hide flags but nothing gives the required behaviour. What am I missing?



Did you try com.intellij.codeInsight.hint.HintManager#HIDE_BY_MOUSEOVER


Hi Yann

I have, and as the name suggests, the popup is closed whenever I move my cursor over it. I need the exact opposite behavior.

My popup contains links, so I want it to stay open when the cursor hovers over it and disappear when the cursor exits the popup.

It looks like LineTooltipRenderer uses a MouseMovementTracker with some logic to achieve this. Obviously I prefer not to copy this whole logic and use some built in API. This sounds like a pretty standard use case to me so I was hoping there's already something I can use?

To make things worse, our plugin currently supports version 2018 and I would prefer not to break this.


Unfortunately there's no ready-made API for your use-case. Indeed EditorMouseHoverPopupManager and MouseMovementTracker can be used as building/blocks inspirations in your plugin


I see.

Thanks very much for your help.

Would you guys consider adding such behavior (e.g. HintManager#HIDE_BY_MOUSEEXIT)? Should I submit a feature request somewhere?