Added MouseEvent.isConsumed() awareness for competing listeners
This commit is contained in:
parent
881b98a6c3
commit
5d95ec072d
2 changed files with 14 additions and 2 deletions
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue