Changeset 5886 in josm for trunk/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java
- Timestamp:
- 2013-04-19T22:21:57+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java
r5884 r5886 2 2 package org.openstreetmap.josm.gui.widgets; 3 3 4 import java.awt.Component; 5 import java.awt.event.FocusEvent; 6 import java.awt.event.FocusListener; 4 7 import java.awt.event.MouseAdapter; 5 8 import java.awt.event.MouseEvent; … … 13 16 public class PopupMenuLauncher extends MouseAdapter { 14 17 private final JPopupMenu menu; 18 private final boolean checkEnabled; 15 19 16 20 /** … … 28 32 */ 29 33 public PopupMenuLauncher(JPopupMenu menu) { 30 this .menu = menu;34 this(menu, false); 31 35 } 32 36 33 @Override 34 public void mousePressed(MouseEvent e) { 35 if (e.isPopupTrigger()) { 36 launch(e); 37 } 37 /** 38 * Creates a new {@link PopupMenuLauncher} with the given menu. 39 * @param menu The popup menu to display 40 * @param checkEnabled if {@code true}, the popup menu will only be displayed if the component triggering the mouse event is enabled 41 * @since 5885 42 */ 43 public PopupMenuLauncher(JPopupMenu menu, boolean checkEnabled) { 44 this.menu = menu; 45 this.checkEnabled = checkEnabled; 38 46 } 39 47 40 @Override 41 public void mouseClicked(MouseEvent e) { 42 if (e.isPopupTrigger()) { 43 launch(e); 44 } 45 } 46 47 @Override 48 public void mouseReleased(MouseEvent e) { 49 if (e.isPopupTrigger()) { 48 @Override public void mousePressed(MouseEvent e) { processEvent(e); } 49 @Override public void mouseClicked(MouseEvent e) { processEvent(e); } 50 @Override public void mouseReleased(MouseEvent e) { processEvent(e); } 51 52 private void processEvent(MouseEvent e) { 53 if (e.isPopupTrigger() && (!checkEnabled || e.getComponent().isEnabled())) { 50 54 launch(e); 51 55 } … … 57 61 * @param evt A mouse event 58 62 */ 59 public void launch( MouseEvent evt) {63 public void launch(final MouseEvent evt) { 60 64 if (menu != null) { 61 menu.show(evt.getComponent(), evt.getX(), evt.getY()); 65 final Component component = evt.getComponent(); 66 if (component != null && component.isFocusable() && !component.hasFocus() && component.requestFocusInWindow()) { 67 component.addFocusListener(new FocusListener() { 68 @Override public void focusLost(FocusEvent e) {} 69 @Override public void focusGained(FocusEvent e) { 70 menu.show(component, evt.getX(), evt.getY()); 71 component.removeFocusListener(this); 72 } 73 }); 74 } else { 75 menu.show(component, evt.getX(), evt.getY()); 76 } 62 77 } 63 78 } 64 79 65 80 /** 66 81 * @return the popup menu if defined, {@code null} otherwise.
Note:
See TracChangeset
for help on using the changeset viewer.