IDEA-220956 Error tooltip shown on F2 stays longer than it should, and obscures editor contents

GitOrigin-RevId: 9fc0f9a54cbac745ec47af99b82841c72a02a0a9
This commit is contained in:
Dmitry Batrak
2019-09-17 10:02:31 +00:00
committed by intellij-monorepo-bot
parent 12be1157ac
commit c2737face2
@@ -8,13 +8,17 @@ import com.intellij.codeInsight.daemon.impl.tooltips.TooltipActionProvider;
import com.intellij.codeInsight.documentation.DocumentationComponent;
import com.intellij.codeInsight.documentation.DocumentationManager;
import com.intellij.codeInsight.documentation.QuickDocUtil;
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.codeInsight.hint.LineTooltipRenderer;
import com.intellij.codeInsight.hint.TooltipGroup;
import com.intellij.codeInsight.hint.TooltipRenderer;
import com.intellij.ui.WidthBasedLayout;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.ide.IdeEventQueue;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.Service;
import com.intellij.openapi.components.ServiceManager;
@@ -77,7 +81,7 @@ public final class EditorMouseHoverPopupManager implements Disposable {
private boolean mySkipNextMovement;
public EditorMouseHoverPopupManager() {
myAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, ApplicationManager.getApplication());
myAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, this);
EditorEventMulticaster multicaster = EditorFactory.getInstance().getEventMulticaster();
multicaster.addCaretListener(new CaretListener() {
@Override
@@ -95,7 +99,7 @@ public final class EditorMouseHoverPopupManager implements Disposable {
return;
}
cancelCurrentProcessing();
cancelProcessingAndCloseHint();
}, this);
EditorMouseHoverPopupControl.getInstance().addListener(() -> {
@@ -109,13 +113,12 @@ public final class EditorMouseHoverPopupManager implements Disposable {
}
});
IdeEventQueue.getInstance().addActivityListener(this::onActivity, ApplicationManager.getApplication());
IdeEventQueue.getInstance().addActivityListener(this::onActivity, this);
ApplicationManager.getApplication().getMessageBus().connect(this).subscribe(AnActionListener.TOPIC, new MyActionListener());
}
@Override
public void dispose() {
}
public void dispose() {}
private void handleMouseMoved(@NotNull EditorMouseEvent e) {
cancelCurrentProcessing();
@@ -320,6 +323,11 @@ public final class EditorMouseHoverPopupManager implements Disposable {
return info == null && elementForQuickDoc == null ? null : new Context(offset, info, elementForQuickDoc);
}
private void cancelProcessingAndCloseHint() {
cancelCurrentProcessing();
closeHint();
}
private void closeHint() {
AbstractPopup hint = getCurrentHint();
if (hint != null) {
@@ -356,8 +364,7 @@ public final class EditorMouseHoverPopupManager implements Disposable {
int offset,
boolean requestFocus,
boolean showImmediately) {
cancelCurrentProcessing();
closeHint();
cancelProcessingAndCloseHint();
Context context = new Context(offset, info, null) {
@Override
long getShowingDelay() {
@@ -782,4 +789,23 @@ public final class EditorMouseHoverPopupManager implements Disposable {
getInstance().cancelCurrentProcessing();
}
}
private static class MyActionListener implements AnActionListener {
@Override
public void beforeActionPerformed(@NotNull AnAction action, @NotNull DataContext dataContext, @NotNull AnActionEvent event) {
if (!Registry.is("editor.new.mouse.hover.popups")) {
return;
}
if (action instanceof HintManagerImpl.ActionToIgnore) return;
getInstance().cancelProcessingAndCloseHint();
}
@Override
public void beforeEditorTyping(char c, @NotNull DataContext dataContext) {
if (!Registry.is("editor.new.mouse.hover.popups")) {
return;
}
getInstance().cancelProcessingAndCloseHint();
}
}
}