diff --git a/Mage.Client/plugins/mage-card-plugin.jar b/Mage.Client/plugins/mage-card-plugin.jar index a679375094b..a29260af2bd 100644 Binary files a/Mage.Client/plugins/mage-card-plugin.jar and b/Mage.Client/plugins/mage-card-plugin.jar differ diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 34872a203ec..1948e786e7a 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -143,6 +143,7 @@ public class MageFrame extends javax.swing.JFrame { desktopPane.add(combat, JLayeredPane.POPUP_LAYER); combat.hideDialog(); desktopPane.add(pickNumber, JLayeredPane.POPUP_LAYER); + session.getUI().addComponent(MageComponents.DESKTOP_PANE, desktopPane); if (autoConnect()) enableButtons(); else diff --git a/Mage.Client/src/main/java/mage/client/components/MageComponents.java b/Mage.Client/src/main/java/mage/client/components/MageComponents.java index dc5e2277516..576a6d48550 100644 --- a/Mage.Client/src/main/java/mage/client/components/MageComponents.java +++ b/Mage.Client/src/main/java/mage/client/components/MageComponents.java @@ -4,7 +4,8 @@ public enum MageComponents { TABLES_MENU_BUTTON("btnGames"), NEW_GAME_BUTTON("btnNewTable"), NEW_TABLE_OK_BUTTON("btnOK"), - TABLE_WAITING_START_BUTTON("btnStart"); + TABLE_WAITING_START_BUTTON("btnStart"), + DESKTOP_PANE("desktopPane"); private String name; MageComponents(String name) { diff --git a/Mage.Client/src/main/java/mage/client/components/MageUI.java b/Mage.Client/src/main/java/mage/client/components/MageUI.java index 27f3617093e..ac452635e2e 100644 --- a/Mage.Client/src/main/java/mage/client/components/MageUI.java +++ b/Mage.Client/src/main/java/mage/client/components/MageUI.java @@ -35,6 +35,27 @@ public class MageUI { } } + + public Component getComponent(MageComponents name) throws InterruptedException { + Object componentSync; + synchronized (ui) { + if (ui.containsKey(name)) { + return ui.get(name); + } else { + componentSync = new Object(); + sync.put(name, componentSync); + } + } + + synchronized (componentSync) { + componentSync.wait(); + if (!ui.containsKey(name)) { + throw new IllegalStateException("Component wasn't initialized. This should not happen."); + } + return ui.get(name); + } + + } public void addButton(MageComponents name, JButton button) { synchronized (ui) { @@ -49,6 +70,17 @@ public class MageUI { } } + public void addComponent(MageComponents name, Component component) { + synchronized (ui) { + ui.put(name, component); + if (sync.containsKey(name)) { + synchronized (sync.get(name)) { + sync.get(name).notifyAll(); + } + } + } + } + public void doClick(MageComponents name) throws InterruptedException { doClick(name, 0); } diff --git a/Mage.Common/src/mage/cards/action/ActionCallback.java b/Mage.Common/src/mage/cards/action/ActionCallback.java index 51e4632ea7a..405f84e3412 100644 --- a/Mage.Common/src/mage/cards/action/ActionCallback.java +++ b/Mage.Common/src/mage/cards/action/ActionCallback.java @@ -6,5 +6,5 @@ public interface ActionCallback { void mouseClicked(MouseEvent e, TransferData data); void mouseMoved(MouseEvent e, TransferData data); void mouseEntered(MouseEvent e, TransferData data); - void mouseExited(MouseEvent e); + void mouseExited(MouseEvent e, TransferData dat); } diff --git a/Mage.Common/src/mage/cards/action/impl/EmptyCallback.java b/Mage.Common/src/mage/cards/action/impl/EmptyCallback.java index a87d4746276..5aa18de2fa8 100644 --- a/Mage.Common/src/mage/cards/action/impl/EmptyCallback.java +++ b/Mage.Common/src/mage/cards/action/impl/EmptyCallback.java @@ -21,7 +21,7 @@ public class EmptyCallback implements ActionCallback { } @Override - public void mouseExited(MouseEvent e) { + public void mouseExited(MouseEvent e, TransferData data) { } @Override diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/card/arcane/CardPanel.java index d7a9e43f640..43d70268dca 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/card/arcane/CardPanel.java @@ -592,7 +592,10 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti synchronized (this) { if (popupShowing) { popupShowing = false; - callback.mouseExited(e); + data.component = this; + data.card = this.gameCard; + data.popupText = popupText; + callback.mouseExited(e, data); } } }