From 5d95ec072d3a7e86c0b7c918618adce14b22dd84 Mon Sep 17 00:00:00 2001 From: Vhati Date: Sun, 10 Dec 2017 22:36:30 -0500 Subject: [PATCH] Added MouseEvent.isConsumed() awareness for competing listeners --- .../modmanager/ui/ClipboardMenuMouseListener.java | 11 +++++++++-- .../java/net/vhati/modmanager/ui/ModInfoArea.java | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/vhati/modmanager/ui/ClipboardMenuMouseListener.java b/src/main/java/net/vhati/modmanager/ui/ClipboardMenuMouseListener.java index da5c917..0a15eec 100644 --- a/src/main/java/net/vhati/modmanager/ui/ClipboardMenuMouseListener.java +++ b/src/main/java/net/vhati/modmanager/ui/ClipboardMenuMouseListener.java @@ -14,6 +14,9 @@ import javax.swing.text.JTextComponent; /** * A Cut/Copy/Paste/SelectAll context menu for JTextComponents. + * + * Add this listener after any others. Any pressed/released listeners that want + * to preempt this menu should call e.consume(). */ public class ClipboardMenuMouseListener extends MouseAdapter { @@ -63,11 +66,13 @@ public class ClipboardMenuMouseListener extends MouseAdapter { @Override public void mousePressed( MouseEvent e ) { + if ( e.isConsumed() ) return; if ( e.isPopupTrigger() ) showMenu( e ); } @Override public void mouseReleased( MouseEvent e ) { + if ( e.isConsumed() ) return; if ( e.isPopupTrigger() ) showMenu( e ); } @@ -79,10 +84,10 @@ public class ClipboardMenuMouseListener extends MouseAdapter { boolean enabled = textComponent.isEnabled(); boolean editable = textComponent.isEditable(); - boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals("")); + boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals( "" )); boolean marked = textComponent.getSelectedText() != null; - boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor); + boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents( null ).isDataFlavorSupported( DataFlavor.stringFlavor ); cutAction.setEnabled( enabled && editable && marked ); copyAction.setEnabled( enabled && marked ); @@ -93,5 +98,7 @@ public class ClipboardMenuMouseListener extends MouseAdapter { if ( nx > 500 ) nx = nx - popup.getSize().width; popup.show( e.getComponent(), nx, e.getY() - popup.getSize().height ); + + e.consume(); } } \ No newline at end of file diff --git a/src/main/java/net/vhati/modmanager/ui/ModInfoArea.java b/src/main/java/net/vhati/modmanager/ui/ModInfoArea.java index d4bc738..154e01d 100644 --- a/src/main/java/net/vhati/modmanager/ui/ModInfoArea.java +++ b/src/main/java/net/vhati/modmanager/ui/ModInfoArea.java @@ -8,6 +8,7 @@ import java.awt.event.MouseEvent; import java.net.URI; import javax.swing.JScrollPane; import javax.swing.JTextPane; +import javax.swing.SwingUtilities; import javax.swing.event.MouseInputAdapter; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; @@ -69,6 +70,9 @@ public class ModInfoArea extends JScrollPane { @Override public void mouseClicked( MouseEvent e ) { + if ( e.isConsumed() ) return; + if ( !SwingUtilities.isLeftMouseButton( e ) ) return; + AttributeSet tmpAttr = doc.getCharacterElement( textPane.viewToModel( e.getPoint() ) ).getAttributes(); Object targetObj = tmpAttr.getAttribute( ATTR_HYPERLINK_TARGET ); if ( targetObj != null ) { @@ -81,6 +85,7 @@ public class ModInfoArea extends JScrollPane { log.error( "Error browsing clicked url: "+ targetObj.toString(), f ); } } + e.consume(); } }