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.
|
* 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 {
|
public class ClipboardMenuMouseListener extends MouseAdapter {
|
||||||
|
|
||||||
|
@ -63,11 +66,13 @@ public class ClipboardMenuMouseListener extends MouseAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed( MouseEvent e ) {
|
public void mousePressed( MouseEvent e ) {
|
||||||
|
if ( e.isConsumed() ) return;
|
||||||
if ( e.isPopupTrigger() ) showMenu( e );
|
if ( e.isPopupTrigger() ) showMenu( e );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased( MouseEvent e ) {
|
public void mouseReleased( MouseEvent e ) {
|
||||||
|
if ( e.isConsumed() ) return;
|
||||||
if ( e.isPopupTrigger() ) showMenu( e );
|
if ( e.isPopupTrigger() ) showMenu( e );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,10 +84,10 @@ public class ClipboardMenuMouseListener extends MouseAdapter {
|
||||||
|
|
||||||
boolean enabled = textComponent.isEnabled();
|
boolean enabled = textComponent.isEnabled();
|
||||||
boolean editable = textComponent.isEditable();
|
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 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 );
|
cutAction.setEnabled( enabled && editable && marked );
|
||||||
copyAction.setEnabled( enabled && marked );
|
copyAction.setEnabled( enabled && marked );
|
||||||
|
@ -93,5 +98,7 @@ public class ClipboardMenuMouseListener extends MouseAdapter {
|
||||||
if ( nx > 500 ) nx = nx - popup.getSize().width;
|
if ( nx > 500 ) nx = nx - popup.getSize().width;
|
||||||
|
|
||||||
popup.show( e.getComponent(), nx, e.getY() - popup.getSize().height );
|
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 java.net.URI;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JTextPane;
|
import javax.swing.JTextPane;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.event.MouseInputAdapter;
|
import javax.swing.event.MouseInputAdapter;
|
||||||
import javax.swing.text.AttributeSet;
|
import javax.swing.text.AttributeSet;
|
||||||
import javax.swing.text.BadLocationException;
|
import javax.swing.text.BadLocationException;
|
||||||
|
@ -69,6 +70,9 @@ public class ModInfoArea extends JScrollPane {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked( MouseEvent e ) {
|
public void mouseClicked( MouseEvent e ) {
|
||||||
|
if ( e.isConsumed() ) return;
|
||||||
|
if ( !SwingUtilities.isLeftMouseButton( e ) ) return;
|
||||||
|
|
||||||
AttributeSet tmpAttr = doc.getCharacterElement( textPane.viewToModel( e.getPoint() ) ).getAttributes();
|
AttributeSet tmpAttr = doc.getCharacterElement( textPane.viewToModel( e.getPoint() ) ).getAttributes();
|
||||||
Object targetObj = tmpAttr.getAttribute( ATTR_HYPERLINK_TARGET );
|
Object targetObj = tmpAttr.getAttribute( ATTR_HYPERLINK_TARGET );
|
||||||
if ( targetObj != null ) {
|
if ( targetObj != null ) {
|
||||||
|
@ -81,6 +85,7 @@ public class ModInfoArea extends JScrollPane {
|
||||||
log.error( "Error browsing clicked url: "+ targetObj.toString(), f );
|
log.error( "Error browsing clicked url: "+ targetObj.toString(), f );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
e.consume();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue