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

This commit is contained in:
myk
2013-02-19 09:34:45 +00:00
parent 567eee7cb6
commit 18985676b9
4 changed files with 15 additions and 24 deletions

View File

@@ -45,7 +45,7 @@ public class CCommand implements ICDoc {
private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override
public void mouseMoved(final MouseEvent e) { public void mouseMoved(final MouseEvent e) {
cardoverAction(); } }; cardoverAction(e); } };
private final MouseListener madCardClick = new MouseAdapter() { @Override private final MouseListener madCardClick = new MouseAdapter() { @Override
public void mousePressed(final MouseEvent e) { public void mousePressed(final MouseEvent e) {
@@ -102,8 +102,8 @@ public class CCommand implements ICDoc {
} }
/** */ /** */
private void cardoverAction() { private void cardoverAction(MouseEvent e) {
final Card c = CCommand.this.view.getTabletop().getCardFromMouseOverPanel(); final Card c = CCommand.this.view.getTabletop().getHoveredCard(e);
if (c != null) { if (c != null) {
CMatchUI.SINGLETON_INSTANCE.setCard(c); CMatchUI.SINGLETON_INSTANCE.setCard(c);
} }
@@ -114,7 +114,7 @@ public class CCommand implements ICDoc {
// original version: // original version:
// final Card c = t.getDetailController().getCurrentCard(); // final Card c = t.getDetailController().getCurrentCard();
// Roujin's bug fix version dated 2-12-2012 // 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)) { if (c != null && c.isInZone(ZoneType.Command)) {
//TODO: Cast commander/activate avatar/roll planar dice here. //TODO: Cast commander/activate avatar/roll planar dice here.

View File

@@ -29,7 +29,6 @@ import java.util.Observable;
import java.util.Observer; import java.util.Observer;
import forge.Card; import forge.Card;
import forge.Command; import forge.Command;
import forge.Constant; import forge.Constant;
import forge.Constant.Preferences; import forge.Constant.Preferences;
@@ -40,8 +39,8 @@ import forge.control.input.Input;
import forge.control.input.InputAttack; import forge.control.input.InputAttack;
import forge.control.input.InputBlock; import forge.control.input.InputBlock;
import forge.control.input.InputPayManaBase; import forge.control.input.InputPayManaBase;
import forge.control.input.InputPayManaSimple;
import forge.control.input.InputPayManaExecuteCommands; import forge.control.input.InputPayManaExecuteCommands;
import forge.control.input.InputPayManaSimple;
import forge.control.input.InputPaySacCost; import forge.control.input.InputPaySacCost;
import forge.game.GameState; import forge.game.GameState;
import forge.game.phase.CombatUtil; import forge.game.phase.CombatUtil;
@@ -73,7 +72,7 @@ public class CField implements ICDoc {
private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override
public void mouseMoved(final MouseEvent e) { public void mouseMoved(final MouseEvent e) {
cardoverAction(); } }; cardoverAction(e); } };
private final MouseListener madHand = new MouseAdapter() { @Override private final MouseListener madHand = new MouseAdapter() { @Override
public void mousePressed(final MouseEvent e) { public void mousePressed(final MouseEvent e) {
@@ -382,8 +381,8 @@ public class CField implements ICDoc {
} }
/** */ /** */
private void cardoverAction() { private void cardoverAction(MouseEvent e) {
final Card c = CField.this.view.getTabletop().getCardFromMouseOverPanel(); final Card c = CField.this.view.getTabletop().getHoveredCard(e);
if (c != null) { if (c != null) {
CMatchUI.SINGLETON_INSTANCE.setCard(c); CMatchUI.SINGLETON_INSTANCE.setCard(c);
} }
@@ -394,7 +393,7 @@ public class CField implements ICDoc {
// original version: // original version:
// final Card c = t.getDetailController().getCurrentCard(); // final Card c = t.getDetailController().getCurrentCard();
// Roujin's bug fix version dated 2-12-2012 // 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(); final Input input = CMessage.SINGLETON_INSTANCE.getInputControl().getInput();

View File

@@ -182,7 +182,7 @@ public class CHand implements ICDoc {
if (e.getButton() != MouseEvent.BUTTON1) { if (e.getButton() != MouseEvent.BUTTON1) {
return; return;
} }
final Card c = view.getHandArea().getCardFromMouseOverPanel(); final Card c = view.getHandArea().getHoveredCard(e);
if (c != null) { if (c != null) {
CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, Singletons.getControl().getPlayer().getZone(ZoneType.Hand)); CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, Singletons.getControl().getPlayer().getZone(ZoneType.Hand));
} }

View File

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