(menu_item_enabled_p_1): Special handling for quit.
[bpt/emacs.git] / src / xmenu.c
index fc7615e..f8d3b14 100644 (file)
@@ -435,6 +435,11 @@ static Lisp_Object
 menu_item_enabled_p_1 (arg)
      Lisp_Object arg;
 {
+  /* If we got a quit from within the menu computation,
+     quit all the way out of it.  This takes care of C-] in the debugger.  */
+  if (CONSP (arg) && EQ (XCONS (arg)->car, Qquit))
+    Fsignal (Qquit, Qnil);
+
   return Qnil;
 }
 
@@ -1495,9 +1500,12 @@ set_frame_menubar (f, first_time)
   int i;
   int id;
   int count;
+  int specpdl_count = specpdl_ptr - specpdl;
 
   count = inhibit_garbage_collection ();
 
+  specbind (Qinhibit_quit, Qt);
+
   id = frame_vector_add_frame (f);
 
   wv = malloc_widget_value ();
@@ -1599,6 +1607,8 @@ set_frame_menubar (f, first_time)
 
   update_frame_menubar (f);
 
+  unbind_to (specpdl_count, Qnil);
+
   UNBLOCK_INPUT;
 }