From 98c291be7b9152aa1f9d81eb5ad721e7026811f4 Mon Sep 17 00:00:00 2001 From: rkfg Date: Sun, 6 Mar 2016 01:45:56 +0300 Subject: [PATCH] Protect tooltip counter from going negative forever. --- .../mage/client/components/ColorPane.java | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/components/ColorPane.java b/Mage.Client/src/main/java/mage/client/components/ColorPane.java index 02abda56756..a5a0dc107f8 100644 --- a/Mage.Client/src/main/java/mage/client/components/ColorPane.java +++ b/Mage.Client/src/main/java/mage/client/components/ColorPane.java @@ -5,6 +5,8 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import javax.swing.JEditorPane; import javax.swing.JPanel; @@ -83,20 +85,36 @@ public class ColorPane extends JEditorPane { }); } - private void setPopupVisibility(final Point location, final Component container, final boolean show) - throws InterruptedException { - final Component c = MageFrame.getUI().getComponent(MageComponents.DESKTOP_PANE); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if (location != null) { - container.setLocation(location); - } - tooltipCounter += show ? 1 : -1; - container.setVisible(tooltipCounter > 0); - c.repaint(); - } - }); + }); + + addMouseListener(new MouseAdapter() { + @Override + public void mouseExited(MouseEvent e) { + tooltipCounter = 1; // will decrement and become effectively zero on leaving the pane + try { + setPopupVisibility(null, MageFrame.getUI().getComponent(MageComponents.POPUP_CONTAINER), false); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } + } + }); + } + + private void setPopupVisibility(final Point location, final Component container, final boolean show) + throws InterruptedException { + final Component c = MageFrame.getUI().getComponent(MageComponents.DESKTOP_PANE); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (location != null) { + container.setLocation(location); + } + tooltipCounter += show ? 1 : -1; + if (tooltipCounter < 0) { + tooltipCounter = 0; + } + container.setVisible(tooltipCounter > 0); + c.repaint(); } }); }