Ticket #7438: bothTabAndA.patch

File bothTabAndA.patch, 2.5 KB (added by akks, 14 years ago)
  • src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

     
    1111import java.awt.AWTEvent;
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
     14import java.awt.Component;
    1415import java.awt.Cursor;
    1516import java.awt.Graphics2D;
     17import java.awt.KeyboardFocusManager;
    1618import java.awt.MenuItem;
    1719import java.awt.Point;
    1820import java.awt.Stroke;
     
    3941
    4042import java.util.TreeSet;
    4143import javax.swing.AbstractAction;
     44import javax.swing.JFrame;
    4245import javax.swing.JOptionPane;
    4346
    4447import javax.swing.JPopupMenu;
     48import javax.swing.SwingUtilities;
    4549import javax.swing.Timer;
    4650import org.openstreetmap.josm.Main;
    4751import org.openstreetmap.josm.actions.JosmAction;
     
    223227        if(Main.map == null || Main.map.mapView == null || !Main.map.mapView.isActiveLayerDrawable())
    224228            return;
    225229        if (event instanceof KeyEvent) {
     230            Component focused = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
     231            Component wantedFocus = Main.map.mapView.getParent();
     232            boolean foundMapViewAncestor=false;
     233            while (focused!=null) {
     234                if (focused==wantedFocus) {
     235                    foundMapViewAncestor=true;
     236                }
     237                focused = focused.getParent();
     238            }
     239            // we accept only events that come from map or toggle dialogs, not from menu and dialogs
     240            if (!foundMapViewAncestor) return;
    226241            processKeyEvent((KeyEvent) event);
    227242        } //  toggle angle snapping
    228243        updateKeyModifiers((InputEvent) event);
     
    237252    private KeyEvent releaseEvent;
    238253    private Timer timer;
    239254    void processKeyEvent(KeyEvent e) {
    240         if (!snappingShortcut.isEvent(e))
     255        if (!snappingShortcut.isEvent(e) && !getShortcut().isEvent(e))
    241256            return;
    242257
    243258        if (e.getID() == KeyEvent.KEY_PRESSED) {
     
    260275    }
    261276
    262277    private void doKeyPressEvent(KeyEvent e) {
    263         if (!snappingShortcut.isEvent(e))
    264             return;
    265278        snapHelper.setFixedMode();
    266279        computeHelperLine();
    267280        redrawIfRequired();
    268281    }
    269282    private void doKeyReleaseEvent(KeyEvent e) {
    270         if (!snappingShortcut.isEvent(e))
    271             return;
    272283        snapHelper.unFixOrTurnOff();
    273284        computeHelperLine();
    274285        redrawIfRequired();