Ticket #7438: AforAngleSnappinn_NO_TAB.patch

File AforAngleSnappinn_NO_TAB.patch, 3.2 KB (added by akks, 12 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;
     
    99103    private SnapHelper snapHelper = new SnapHelper();
    100104
    101105    private Shortcut backspaceShortcut;
    102     private Shortcut snappingShortcut;
    103106
    104107    private JCheckBoxMenuItem snapCheckboxMenuItem;
    105108
     
    108111            Shortcut.registerShortcut("mapmode:draw", tr("Mode: {0}", tr("Draw")), KeyEvent.VK_A, Shortcut.DIRECT),
    109112            mapFrame, ImageProvider.getCursor("crosshair", null));
    110113
    111         snappingShortcut = Shortcut.registerShortcut("mapmode:drawanglesnapping",
    112             tr("Mode: Draw Angle snapping"), KeyEvent.VK_TAB, Shortcut.DIRECT);
    113114        addMenuItem();
    114115        snapHelper.setMenuCheckBox(snapCheckboxMenuItem);
    115116        cursorJoinNode = ImageProvider.getCursor("crosshair", "joinnode");
     
    223224        if(Main.map == null || Main.map.mapView == null || !Main.map.mapView.isActiveLayerDrawable())
    224225            return;
    225226        if (event instanceof KeyEvent) {
     227            Component focused = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
     228            Component wantedFocus = Main.map.mapView.getParent();
     229            boolean foundMapViewAncestor=false;
     230            while (focused!=null) {
     231                if (focused==wantedFocus) {
     232                    foundMapViewAncestor=true;
     233                }
     234                focused = focused.getParent();
     235            }
     236            // we accept only events that come from map or toggle dialogs, not from menu and dialogs
     237            if (!foundMapViewAncestor) return;
    226238            processKeyEvent((KeyEvent) event);
    227239        } //  toggle angle snapping
    228240        updateKeyModifiers((InputEvent) event);
     
    237249    private KeyEvent releaseEvent;
    238250    private Timer timer;
    239251    void processKeyEvent(KeyEvent e) {
    240         if (!snappingShortcut.isEvent(e))
     252        if (!getShortcut().isEvent(e))
    241253            return;
    242254
    243255        if (e.getID() == KeyEvent.KEY_PRESSED) {
     
    260272    }
    261273
    262274    private void doKeyPressEvent(KeyEvent e) {
    263         if (!snappingShortcut.isEvent(e))
    264             return;
    265275        snapHelper.setFixedMode();
    266276        computeHelperLine();
    267277        redrawIfRequired();
    268278    }
    269279    private void doKeyReleaseEvent(KeyEvent e) {
    270         if (!snappingShortcut.isEvent(e))
    271             return;
    272280        snapHelper.unFixOrTurnOff();
    273281        computeHelperLine();
    274282        redrawIfRequired();