/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
myResizable = b;
}
+ protected boolean canAutoHideOn(TooltipEvent event) {
+ return true;
+ }
+
/**
* Shows the hint in the layered pane. Coordinates <code>x</code> and <code>y</code>
* are in <code>parentComponent</code> coordinate system. Note that the component
new IdeTooltip(hintHint.getOriginalComponent(), hintHint.getOriginalPoint(), myComponent, hintHint, myComponent) {
@Override
protected boolean canAutohideOn(TooltipEvent event) {
- if (event.getInputEvent() instanceof MouseEvent) {
+ if (!LightweightHint.this.canAutoHideOn(event)) {
+ return false;
+ }
+ else if (event.getInputEvent() instanceof MouseEvent) {
return !(hintHint.isContentActive() && event.isIsEventInsideBalloon());
}
else if (event.getAction() != null) {
/*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.codeInsight.hint.HintUtil;
import com.intellij.codeInsight.navigation.NavigationUtil;
+import com.intellij.ide.TooltipEvent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.event.EditorMouseEvent;
+import com.intellij.openapi.editor.impl.EditorComponentImpl;
+import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.editor.markup.HighlighterLayer;
import com.intellij.openapi.editor.markup.HighlighterTargetArea;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
+import java.awt.event.*;
import java.util.EventObject;
/**
}
}
else {
- int offset = calculateOffset(editor, point);
- if (myCurrentRange != null && myCurrentRange.getStartOffset() <= offset && offset <= myCurrentRange.getEndOffset()) {
+ if (isInsideCurrentRange(editor, point)) {
return true;
}
}
return false;
}
+ boolean isInsideCurrentRange(Editor editor, Point point) {
+ return myCurrentRange != null && myCurrentRange.contains(calculateOffset(editor, point));
+ }
+
public static int calculateOffset(@NotNull Editor editor, @NotNull Point point) {
return editor.logicalPositionToOffset(editor.xyToLogicalPosition(point));
}
if (myCurrentHint != null) {
myCurrentHint.hide();
}
- myCurrentHint = new LightweightHint(component);
+ myCurrentHint = new LightweightHint(component) {
+ @Override
+ protected boolean canAutoHideOn(TooltipEvent event) {
+ InputEvent inputEvent = event.getInputEvent();
+ if (inputEvent instanceof MouseEvent) {
+ Component comp = inputEvent.getComponent();
+ if (comp instanceof EditorComponentImpl) {
+ EditorImpl editor = ((EditorComponentImpl)comp).getEditor();
+ return !isInsideCurrentRange(editor, ((MouseEvent)inputEvent).getPoint());
+ }
+ }
+ return true;
+ }
+ };
myCurrentHint.addHintListener(new HintListener() {
@Override
public void hintHidden(EventObject event) {
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
-import com.intellij.openapi.editor.event.*;
+import com.intellij.openapi.editor.event.EditorMouseAdapter;
+import com.intellij.openapi.editor.event.EditorMouseEvent;
+import com.intellij.openapi.editor.event.EditorMouseEventArea;
+import com.intellij.openapi.editor.event.EditorMouseMotionListener;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.registry.Registry;
if (myRequest != null && !myRequest.isKeepHint(editor, point)) {
hideHint();
}
+ else if (type == ValueHintType.MOUSE_OVER_HINT && myRequest != null && !myRequest.isHintHidden() && myRequest.isInsideCurrentRange(editor, point)) {
+ return;
+ }
for (DebuggerSupport support : mySupports) {
QuickEvaluateHandler handler = support.getQuickEvaluateHandler();