From a0ed89035f02a6969330d7720e3ccef55015b7bb Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Thu, 23 Nov 2023 09:23:01 +0400 Subject: [PATCH] GUI: fixed wrong clicks from additional mouse buttons (now only left clicks are allowed, closes #11455) --- .../src/main/java/mage/client/MageFrame.java | 7 +++++-- .../main/java/mage/client/cards/CardsList.java | 3 +++ .../java/mage/client/cards/DragCardGrid.java | 15 +++++++++++---- .../mage/client/components/HoverButton.java | 9 +++++---- .../components/ext/dlg/DialogManager.java | 18 +++++++++--------- .../mage/client/deckeditor/CardSelector.java | 3 +++ .../client/deckeditor/DeckEditorPanel.java | 3 +++ .../client/deckeditor/table/TableModel.java | 6 ++++++ .../java/mage/client/dialog/MageDialog.java | 4 ++++ .../mage/client/dialog/PickCheckBoxDialog.java | 3 +++ .../mage/client/dialog/PickChoiceDialog.java | 3 +++ .../mage/client/dialog/PreferencesDialog.java | 3 +++ .../plugins/adapters/MageActionCallback.java | 8 ++++++++ .../mage/client/table/TablesButtonColumn.java | 5 ++++- .../java/mage/client/table/TablesPanel.java | 3 +++ .../main/java/mage/client/util/URLHandler.java | 5 ++++- .../java/org/mage/card/arcane/CardPanel.java | 5 +++++ 17 files changed, 82 insertions(+), 21 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 24aa0f85355..32cab3a0391 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -1022,8 +1022,11 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { btnDebug.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnDebug.addMouseListener(new java.awt.event.MouseAdapter() { @Override - public void mouseClicked(java.awt.event.MouseEvent evt) { - btnDebugMouseClicked(evt); + public void mouseClicked(java.awt.event.MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } + btnDebugMouseClicked(e); } }); mageToolbar.add(btnDebug); diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.java b/Mage.Client/src/main/java/mage/client/cards/CardsList.java index b738a7a02ad..efce8343a15 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.java @@ -163,6 +163,9 @@ mainTable.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } // simulate mouse click on the card if ((e.getClickCount() & 1) == 0 && (e.getClickCount() > 0) && !e.isConsumed()) { // double clicks and repeated double clicks e.consume(); diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 44d6877c09c..40fb19b0e9f 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -789,11 +789,12 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg @Override public void mousePressed(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { - isDragging = true; - beginSelectionDrag(e.getX(), e.getY(), e.isShiftDown()); - updateSelectionDrag(e.getX(), e.getY()); + if (!SwingUtilities.isLeftMouseButton(e)) { + return; } + isDragging = true; + beginSelectionDrag(e.getX(), e.getY(), e.isShiftDown()); + updateSelectionDrag(e.getX(), e.getY()); } @Override @@ -973,6 +974,9 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg visibilityButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } visPopup.show(e.getComponent(), 0, e.getComponent().getHeight()); } }); @@ -2297,6 +2301,9 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg this.countLabelListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } JLabel countLabel = (JLabel) e.getComponent(); List cards = findCardStackByCountLabel(countLabel); boolean selected = !cards.isEmpty() && cards.get(0).isSelected(); diff --git a/Mage.Client/src/main/java/mage/client/components/HoverButton.java b/Mage.Client/src/main/java/mage/client/components/HoverButton.java index 638fa4363a6..471ed1cdbf7 100644 --- a/Mage.Client/src/main/java/mage/client/components/HoverButton.java +++ b/Mage.Client/src/main/java/mage/client/components/HoverButton.java @@ -271,10 +271,11 @@ public class HoverButton extends JPanel implements MouseListener { @Override public void mousePressed(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { - if (isEnabled() && observer != null) { - observer.execute(); - } + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } + if (isEnabled() && observer != null) { + observer.execute(); } } diff --git a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java index 000a522aef7..1b63a44332b 100644 --- a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java +++ b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java @@ -249,15 +249,15 @@ public class DialogManager extends JComponent implements MouseListener, MouseMot @Override public void mousePressed(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { - j = (JComponent) getComponentAt(e.getX(), e.getY()); - - if (j instanceof DialogContainer) { - rec = j.getBounds(); - bDragged = true; - mx = e.getX(); - my = e.getY(); - } + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } + j = (JComponent) getComponentAt(e.getX(), e.getY()); + if (j instanceof DialogContainer) { + rec = j.getBounds(); + bDragged = true; + mx = e.getX(); + my = e.getY(); } } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index 90a80f2de16..4f820a1fedd 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -143,6 +143,9 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene mainTable.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if ((e.getClickCount() & 1) == 0 && (e.getClickCount() > 0) && !e.isConsumed()) { // double clicks and repeated double clicks e.consume(); if (e.isAltDown()) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index e81b6a8b9fd..f1506ff52ca 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -113,6 +113,9 @@ public class DeckEditorPanel extends javax.swing.JPanel { .forEach(c -> { c.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } List cardNames = new ArrayList<>(); LegalityLabel label = (LegalityLabel) e.getComponent(); label.getValidator().getErrorsList().stream() diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java index be899d4d037..8650542b7d2 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java @@ -345,6 +345,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid { table.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } int row = table.getSelectedRow(); if (row != -1) { showImage(row); @@ -356,6 +359,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid { MouseListener mouse = new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } TableColumnModel columnModel = table.getColumnModel(); int viewColumn = columnModel.getColumnIndexAtX(e.getX()); int column = table.convertColumnIndexToModel(viewColumn); diff --git a/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java b/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java index d31be34d434..45e9121aafe 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java @@ -37,6 +37,10 @@ public class MageDialog extends javax.swing.JInternalFrame { @Override public void mouseClicked(MouseEvent e) { // double clicks and repeated double clicks + // minimize window to title bar + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if ((e.getClickCount() & 1) == 0 && (e.getClickCount() > 0) && !e.isConsumed()) { e.consume(); try { diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java index 3345dbf0f80..34e7dada7ad 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java @@ -162,6 +162,9 @@ public class PickCheckBoxDialog extends MageDialog { listChoices.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if (e.getClickCount() == 2) { doChoose(); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java index 7bcc87192ef..a406252a676 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java @@ -136,6 +136,9 @@ public class PickChoiceDialog extends MageDialog { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if (e.getClickCount() == 2) { doChoose(); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index e3d651c31ad..a0e0fed6df0 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -3769,6 +3769,9 @@ public class PreferencesDialog extends javax.swing.JDialog { jLabel.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if (selectedAvatarId != id) { setSelectedId(id); SessionHandler.updatePreferencesForServer(getUserData()); diff --git a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java index 7b87897257d..259a686922e 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java @@ -121,6 +121,14 @@ public class MageActionCallback implements ActionCallback { if (e.isConsumed()) { return; } + + // allows only a standard mouse buttons + if (!e.isPopupTrigger() + && !SwingUtilities.isLeftMouseButton(e) + && !SwingUtilities.isRightMouseButton(e)) { + return; + } + if (data.getComponent().getCardContainer() instanceof CardEventProducer) { ClientEventType clickType = doubleClick ? ClientEventType.CARD_DOUBLE_CLICK : ClientEventType.CARD_CLICK; CardEventProducer cardContainer = (CardEventProducer) data.getComponent().getCardContainer(); diff --git a/Mage.Client/src/main/java/mage/client/table/TablesButtonColumn.java b/Mage.Client/src/main/java/mage/client/table/TablesButtonColumn.java index baaa57846e9..422f36be3b6 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesButtonColumn.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesButtonColumn.java @@ -90,7 +90,10 @@ public class TablesButtonColumn extends AbstractCellEditor implements TableCellR } @Override - public void mousePressed(MouseEvent arg0) { + public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if (table.isEditing() && table.getCellEditor() == this) { isButtonColumnEditor = true; } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 2ad921ac7aa..42db749eb08 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -580,6 +580,9 @@ public class TablesPanel extends javax.swing.JPanel { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } int modelRow = TablesUtil.getSelectedModelRow(table); if (e.getClickCount() == 2 && modelRow != -1) { action.actionPerformed(new ActionEvent(table, ActionEvent.ACTION_PERFORMED, TablesUtil.getSearchIdFromTable(table, modelRow))); diff --git a/Mage.Client/src/main/java/mage/client/util/URLHandler.java b/Mage.Client/src/main/java/mage/client/util/URLHandler.java index e5ea0bc2675..7dfa6fe4ae7 100644 --- a/Mage.Client/src/main/java/mage/client/util/URLHandler.java +++ b/Mage.Client/src/main/java/mage/client/util/URLHandler.java @@ -8,7 +8,7 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import javax.swing.JLabel; +import javax.swing.*; /** * @@ -44,6 +44,9 @@ public class URLHandler { currentMouseAdapter = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } if (e.getClickCount() > 0) { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index 51891cee047..9e77821b1d3 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -608,6 +608,11 @@ public abstract class CardPanel extends MagePermanent implements ComponentListen return; } + // ignore all additional mouse buttons + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } + // double clicks processing, see https://stackoverflow.com/questions/4051659/identifying-double-click-in-java // logic: run timer to reset clicks counter mouseClicksCount = e.getClickCount();