From 18985676b916ce94f589dc25d35aa908e8c70337 Mon Sep 17 00:00:00 2001 From: myk Date: Tue, 19 Feb 2013 09:34:45 +0000 Subject: [PATCH] ensure card that last registered the cursor hover isn't tapped when the application loses focus via alt-tab and then is clicked on again --- .../forge/gui/match/nonsingleton/CCommand.java | 8 ++++---- .../forge/gui/match/nonsingleton/CField.java | 11 +++++------ .../forge/gui/match/nonsingleton/CHand.java | 2 +- .../forge/view/arcane/CardPanelContainer.java | 18 +++++------------- 4 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/main/java/forge/gui/match/nonsingleton/CCommand.java b/src/main/java/forge/gui/match/nonsingleton/CCommand.java index 0a9fac90356..e7bf41f086a 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CCommand.java +++ b/src/main/java/forge/gui/match/nonsingleton/CCommand.java @@ -45,7 +45,7 @@ public class CCommand implements ICDoc { private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override public void mouseMoved(final MouseEvent e) { - cardoverAction(); } }; + cardoverAction(e); } }; private final MouseListener madCardClick = new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { @@ -102,8 +102,8 @@ public class CCommand implements ICDoc { } /** */ - private void cardoverAction() { - final Card c = CCommand.this.view.getTabletop().getCardFromMouseOverPanel(); + private void cardoverAction(MouseEvent e) { + final Card c = CCommand.this.view.getTabletop().getHoveredCard(e); if (c != null) { CMatchUI.SINGLETON_INSTANCE.setCard(c); } @@ -114,7 +114,7 @@ public class CCommand implements ICDoc { // original version: // final Card c = t.getDetailController().getCurrentCard(); // Roujin's bug fix version dated 2-12-2012 - final Card c = CCommand.this.view.getTabletop().getCardFromMouseOverPanel(); + final Card c = CCommand.this.view.getTabletop().getHoveredCard(e); if (c != null && c.isInZone(ZoneType.Command)) { //TODO: Cast commander/activate avatar/roll planar dice here. diff --git a/src/main/java/forge/gui/match/nonsingleton/CField.java b/src/main/java/forge/gui/match/nonsingleton/CField.java index 5e849a2e5a5..6333890a1fa 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CField.java +++ b/src/main/java/forge/gui/match/nonsingleton/CField.java @@ -29,7 +29,6 @@ import java.util.Observable; import java.util.Observer; import forge.Card; - import forge.Command; import forge.Constant; import forge.Constant.Preferences; @@ -40,8 +39,8 @@ import forge.control.input.Input; import forge.control.input.InputAttack; import forge.control.input.InputBlock; import forge.control.input.InputPayManaBase; -import forge.control.input.InputPayManaSimple; import forge.control.input.InputPayManaExecuteCommands; +import forge.control.input.InputPayManaSimple; import forge.control.input.InputPaySacCost; import forge.game.GameState; import forge.game.phase.CombatUtil; @@ -73,7 +72,7 @@ public class CField implements ICDoc { private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override public void mouseMoved(final MouseEvent e) { - cardoverAction(); } }; + cardoverAction(e); } }; private final MouseListener madHand = new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { @@ -382,8 +381,8 @@ public class CField implements ICDoc { } /** */ - private void cardoverAction() { - final Card c = CField.this.view.getTabletop().getCardFromMouseOverPanel(); + private void cardoverAction(MouseEvent e) { + final Card c = CField.this.view.getTabletop().getHoveredCard(e); if (c != null) { CMatchUI.SINGLETON_INSTANCE.setCard(c); } @@ -394,7 +393,7 @@ public class CField implements ICDoc { // original version: // final Card c = t.getDetailController().getCurrentCard(); // Roujin's bug fix version dated 2-12-2012 - final Card c = CField.this.view.getTabletop().getCardFromMouseOverPanel(); + final Card c = CField.this.view.getTabletop().getHoveredCard(e); final Input input = CMessage.SINGLETON_INSTANCE.getInputControl().getInput(); diff --git a/src/main/java/forge/gui/match/nonsingleton/CHand.java b/src/main/java/forge/gui/match/nonsingleton/CHand.java index dac5bf7fa91..c6599d8a1be 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CHand.java +++ b/src/main/java/forge/gui/match/nonsingleton/CHand.java @@ -182,7 +182,7 @@ public class CHand implements ICDoc { if (e.getButton() != MouseEvent.BUTTON1) { return; } - final Card c = view.getHandArea().getCardFromMouseOverPanel(); + final Card c = view.getHandArea().getHoveredCard(e); if (c != null) { CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, Singletons.getControl().getPlayer().getZone(ZoneType.Hand)); } diff --git a/src/main/java/forge/view/arcane/CardPanelContainer.java b/src/main/java/forge/view/arcane/CardPanelContainer.java index d150c387553..f08d46d8c34 100644 --- a/src/main/java/forge/view/arcane/CardPanelContainer.java +++ b/src/main/java/forge/view/arcane/CardPanelContainer.java @@ -559,13 +559,6 @@ public abstract class CardPanelContainer extends JPanel { } } - /** - * @return {@link forge.view.arcane.CardPanel} - */ - public final CardPanel getMouseOverPanel() { - return this.hoveredPanel; - } - /** *

* getCardFromMouseOverPanel. @@ -573,12 +566,11 @@ public abstract class CardPanelContainer extends JPanel { * * @return a {@link forge.Card} object. */ - public final Card getCardFromMouseOverPanel() { - if (this.hoveredPanel != null) { - return this.hoveredPanel.getGameCard(); - } else { - return null; - } + public final Card getHoveredCard(MouseEvent e) { + // re-evaluate cursor position so if we hovered over a card, alt-tabbed out of the application, then + // clicked back on the application somewhere else, the last hovered card won't register the click + CardPanel p = getCardPanel(e.getX(), e.getY()); + return (p == null && p == hoveredPanel) ? null : p.getGameCard(); } /**