diff --git a/src/gui/jmanager.cpp b/src/gui/jmanager.cpp
index 2953b3137..0b63e6430 100644
--- a/src/gui/jmanager.cpp
+++ b/src/gui/jmanager.cpp
@@ -679,6 +679,14 @@ void jmanager_enqueue_message(JMessage msg)
     jmessage_free(msg);
 }
 
+JWidget jmanager_get_top_window()
+{
+  if (default_manager)
+    return TOPWND(default_manager);
+  else
+    return NULL;
+}
+
 JWidget jmanager_get_focus()
 {
   return focus_widget;
diff --git a/src/gui/jmanager.h b/src/gui/jmanager.h
index f951652eb..2709e951d 100644
--- a/src/gui/jmanager.h
+++ b/src/gui/jmanager.h
@@ -31,6 +31,8 @@ bool jmanager_timer_is_running(int timer_id);
 
 void jmanager_enqueue_message(JMessage msg);
 
+JWidget jmanager_get_top_window();
+
 JWidget jmanager_get_focus();
 JWidget jmanager_get_mouse();
 JWidget jmanager_get_capture();
diff --git a/src/modules/gui.cpp b/src/modules/gui.cpp
index 0ef7de117..94c1e4e4c 100644
--- a/src/modules/gui.cpp
+++ b/src/modules/gui.cpp
@@ -1173,7 +1173,17 @@ static bool manager_msg_proc(JWidget widget, JMessage msg)
       }
       break;
 
-    case JM_KEYPRESSED:
+    case JM_KEYPRESSED: {
+      Frame* toplevel_frame = dynamic_cast<Frame*>(jmanager_get_top_window());
+
+      // If there is a foreground window as top level...
+      if (toplevel_frame &&
+	  toplevel_frame != app_get_top_window() &&
+	  toplevel_frame->is_foreground()) {
+	// We just do not process keyboard shortcuts for menus and tools
+	break;
+      }
+
       for (std::vector<Shortcut*>::iterator
 	     it = shortcuts->begin(); it != shortcuts->end(); ++it) {
 	Shortcut* shortcut = *it;
@@ -1266,6 +1276,7 @@ static bool manager_msg_proc(JWidget widget, JMessage msg)
 	}
       }
       break;
+    }
 
   }