Added MouseEvent.isConsumed() awareness for competing listeners

This commit is contained in:
Vhati 2017-12-10 22:36:30 -05:00
parent 881b98a6c3
commit 5d95ec072d
2 changed files with 14 additions and 2 deletions

View file

@ -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 );
}
@ -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();
}
}

View file

@ -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();
}
}