From 5943a71b030d9e07fbf51b8d305f3aa8268241b4 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 30 Jun 2016 13:32:00 +0300 Subject: [PATCH] show warning in settings UI when user enables ligatures, and IDE is not launched using bundled JRE correct checks whether tooltip is defined, make sure mouse events are generated for component with custom tooltip, not its parent --- .../com/intellij/ide/IdeTooltipManager.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java b/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java index d2f6c485db1b..e33781da2387 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java @@ -35,14 +35,12 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.RegistryValue; import com.intellij.openapi.util.registry.RegistryValueListener; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.*; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.panels.Wrapper; import com.intellij.util.Alarm; -import com.intellij.util.ui.Html; -import com.intellij.util.ui.JBInsets; -import com.intellij.util.ui.JBUI; -import com.intellij.util.ui.UIUtil; +import com.intellij.util.ui.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -59,6 +57,7 @@ import java.awt.event.MouseEvent; public class IdeTooltipManager implements ApplicationComponent, AWTEventListener { private static final Key CUSTOM_TOOLTIP = Key.create("custom.tooltip"); + private static final MouseEventAdapter DUMMY_LISTENER = new MouseEventAdapter(null); public static final String IDE_TOOLTIP_PLACE = "IdeTooltip"; public static final Color GRAPHITE_COLOR = new Color(100, 100, 100, 230); @@ -143,7 +142,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener if (!myCurrentTipIsCentered) { myX = me.getX(); myY = me.getY(); - if (c instanceof JComponent && ((JComponent)c).getToolTipText(me) == null && (myQueuedTooltip == null || !myQueuedTooltip.isHint())) { + if (c instanceof JComponent && !isTooltipDefined((JComponent)c, me) && (myQueuedTooltip == null || !myQueuedTooltip.isHint())) { hideCurrent(me, null, null);//There is no tooltip or hint here, let's proceed it as MOUSE_EXITED } else { @@ -178,9 +177,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener if (JBPopupFactory.getInstance().isChildPopupFocused(wnd)) return; } - String tooltipText = comp.getToolTipText(me); - if ((tooltipText == null || tooltipText.trim().isEmpty()) && getCustomTooltip(comp) == null) return; - + if (!isTooltipDefined(comp, me)) return; boolean centerDefault = Boolean.TRUE.equals(comp.getClientProperty(UIUtil.CENTER_TOOLTIP_DEFAULT)); boolean centerStrict = Boolean.TRUE.equals(comp.getClientProperty(UIUtil.CENTER_TOOLTIP_STRICT)); @@ -200,6 +197,10 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener queueShow(comp, me, centerStrict || centerDefault, shift, -shift, -shift); } + private boolean isTooltipDefined(JComponent comp, MouseEvent me) { + return !StringUtil.isEmpty(comp.getToolTipText(me)) || getCustomTooltip(comp) != null; + } + private void queueShow(final JComponent c, final MouseEvent me, final boolean toCenter, int shift, int posChangeX, int posChangeY) { IdeTooltip tooltip = getCustomTooltip(c); if (tooltip == null) { @@ -229,6 +230,13 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener public void setCustomTooltip(JComponent component, IdeTooltip tooltip) { UIUtil.putClientProperty(component, CUSTOM_TOOLTIP, tooltip); + // We need to register a dummy mouse listener to make sure events will be generated for this specific component, not its parent + component.removeMouseListener(DUMMY_LISTENER); + component.removeMouseMotionListener(DUMMY_LISTENER); + if (tooltip != null) { + component.addMouseListener(DUMMY_LISTENER); + component.addMouseMotionListener(DUMMY_LISTENER); + } } public IdeTooltip getCustomTooltip(JComponent component) {