+2005-06-04 Jan Dj\e,Ad\e(Brv <jan.h.d@swipnet.se>
+
+ * macmenu.c (cleanup_popup_menu): New function.
+ (Fx_popup_menu): unwind protect cleanup_popup_menu in case
+ mac_menu_show Quit:s.
+ (mac_menu_show): Quit on cancel if not popped up on click (i.e.
+ a dialog).
+
2005-06-04 Kim F. Storm <storm@cua.dk>
* coding.c (decode_coding_string): Handle CODING_FINISH_INTERRUPT.
}
}
\f
+static Lisp_Object
+cleanup_popup_menu (arg)
+ Lisp_Object arg;
+{
+ discard_menu_items ();
+}
+
DEFUN ("x-popup-menu", Fx_popup_menu, Sx_popup_menu, 2, 2, 0,
doc: /* Pop up a deck-of-cards menu and return user's selection.
POSITION is a position specification. This is either a mouse button
int keymaps = 0;
int for_click = 0;
struct gcpro gcpro1;
+ int specpdl_count = SPECPDL_INDEX ();
+
#ifdef HAVE_MENUS
if (! NILP (position))
#ifdef HAVE_MENUS
/* Display them in a menu. */
+ record_unwind_protect (cleanup_popup_menu, Qnil);
BLOCK_INPUT;
selection = mac_menu_show (f, xpos, ypos, for_click,
keymaps, title, &error_name);
UNBLOCK_INPUT;
-
- discard_menu_items ();
+ unbind_to (specpdl_count, Qnil);
UNGCPRO;
#endif /* HAVE_MENUS */
}
}
}
+ else if (!for_click)
+ /* Make "Cancel" equivalent to C-g. */
+ Fsignal (Qquit, Qnil);
return Qnil;
}