boolean (@Nullable MouseEvent me, @Nullable IdeTooltip tooltipToShow, @Nullable AnAction action, @Nullable AnActionEvent event, final boolean animationEnabled) { if (helpTooltipManager != null && myHideHelpTooltip) { hideCurrentNow(false); return true; } if (currentTooltip != null && me != null && currentTooltip.isInside(new RelativePoint(me))) { if (me.getButton() == MouseEvent.NOBUTTON || myBalloon == null || isBlockClicks(myBalloon)) { return false; } } myShowRequest = null; myQueuedComponent = null; myQueuedTooltip = null; if (currentTooltip == null) return true; if (myBalloon != null) { RelativePoint target = me != null ? new RelativePoint(me) : null; boolean isInsideOrMovingForward = target != null && (isInside(myBalloon, target) || isMovingForward(myBalloon, target)); boolean canAutoHide = currentTooltip.canAutohideOn(new TooltipEvent(me, isInsideOrMovingForward, action, event)); boolean implicitMouseMove = me != null && (me.getID() == MouseEvent.MOUSE_MOVED || me.getID() == MouseEvent.MOUSE_EXITED || me.getID() == MouseEvent.MOUSE_ENTERED); if (!canAutoHide || (isInsideOrMovingForward && implicitMouseMove) || (currentTooltip.isExplicitClose() && implicitMouseMove) || (tooltipToShow != null && !tooltipToShow.isHint() && Comparing.equal(currentTooltip, tooltipToShow))) { if (hideRunnable != null) { hideRunnable = null; } return false; } } hideRunnable = () -> { if (hideRunnable != null) { hideCurrentNow(animationEnabled); hideRunnable = null; } }; if (me != null && me.getButton() == MouseEvent.NOBUTTON) { myAlarm.addRequest(hideRunnable, RegistryManager.getInstance().intValue("ide.tooltip.autoDismissDeadZone")); } else { hideRunnable.run(); hideRunnable = null; } return true; }