Ignore:
Timestamp:
2013-04-19T22:21:57+02:00 (11 years ago)
Author:
Don-vip
Message:

see #4429 - Right click menu "undo, cut, copy, paste, delete, select all" for each text component (originally based on patch by NooN)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java

    r5884 r5886  
    22package org.openstreetmap.josm.gui.widgets;
    33
     4import java.awt.Component;
     5import java.awt.event.FocusEvent;
     6import java.awt.event.FocusListener;
    47import java.awt.event.MouseAdapter;
    58import java.awt.event.MouseEvent;
     
    1316public class PopupMenuLauncher extends MouseAdapter {
    1417    private final JPopupMenu menu;
     18    private final boolean checkEnabled;
    1519
    1620    /**
     
    2832     */
    2933    public PopupMenuLauncher(JPopupMenu menu) {
    30         this.menu = menu;
     34        this(menu, false);
    3135    }
    3236
    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;
    3846    }
    3947
    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())) {
    5054            launch(e);
    5155        }
     
    5761     * @param evt A mouse event
    5862     */
    59     public void launch(MouseEvent evt) {
     63    public void launch(final MouseEvent evt) {
    6064        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            }
    6277        }
    6378    }
    64 
     79   
    6580    /**
    6681     * @return the popup menu if defined, {@code null} otherwise.
Note: See TracChangeset for help on using the changeset viewer.