Index: src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 5041)
+++ src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(working copy)
@@ -11,8 +11,10 @@
 import java.awt.AWTEvent;
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Graphics2D;
+import java.awt.KeyboardFocusManager;
 import java.awt.MenuItem;
 import java.awt.Point;
 import java.awt.Stroke;
@@ -39,9 +41,11 @@
 
 import java.util.TreeSet;
 import javax.swing.AbstractAction;
+import javax.swing.JFrame;
 import javax.swing.JOptionPane;
 
 import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
 import javax.swing.Timer;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -99,7 +103,6 @@
     private SnapHelper snapHelper = new SnapHelper();
 
     private Shortcut backspaceShortcut;
-    private Shortcut snappingShortcut;
 
     private JCheckBoxMenuItem snapCheckboxMenuItem;
 
@@ -108,8 +111,6 @@
             Shortcut.registerShortcut("mapmode:draw", tr("Mode: {0}", tr("Draw")), KeyEvent.VK_A, Shortcut.DIRECT),
             mapFrame, ImageProvider.getCursor("crosshair", null));
 
-        snappingShortcut = Shortcut.registerShortcut("mapmode:drawanglesnapping",
-            tr("Mode: Draw Angle snapping"), KeyEvent.VK_TAB, Shortcut.DIRECT);
         addMenuItem();
         snapHelper.setMenuCheckBox(snapCheckboxMenuItem);
         cursorJoinNode = ImageProvider.getCursor("crosshair", "joinnode");
@@ -223,6 +224,17 @@
         if(Main.map == null || Main.map.mapView == null || !Main.map.mapView.isActiveLayerDrawable())
             return;
         if (event instanceof KeyEvent) {
+            Component focused = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+            Component wantedFocus = Main.map.mapView.getParent();
+            boolean foundMapViewAncestor=false;
+            while (focused!=null) {
+                if (focused==wantedFocus) {
+                    foundMapViewAncestor=true;
+                }
+                focused = focused.getParent();
+            }
+            // we accept only events that come from map or toggle dialogs, not from menu and dialogs
+            if (!foundMapViewAncestor) return;
             processKeyEvent((KeyEvent) event);
         } //  toggle angle snapping
         updateKeyModifiers((InputEvent) event);
@@ -237,7 +249,7 @@
     private KeyEvent releaseEvent;
     private Timer timer;
     void processKeyEvent(KeyEvent e) {
-        if (!snappingShortcut.isEvent(e))
+        if (!getShortcut().isEvent(e))
             return;
 
         if (e.getID() == KeyEvent.KEY_PRESSED) {
@@ -260,15 +272,11 @@
     }
 
     private void doKeyPressEvent(KeyEvent e) {
-        if (!snappingShortcut.isEvent(e))
-            return;
         snapHelper.setFixedMode();
         computeHelperLine();
         redrawIfRequired();
     }
     private void doKeyReleaseEvent(KeyEvent e) {
-        if (!snappingShortcut.isEvent(e))
-            return;
         snapHelper.unFixOrTurnOff();
         computeHelperLine();
         redrawIfRequired();
