# HG changeset patch # User Richard M. Stallman # Date 762076930 0 # Node ID b2cc63a564151f6d0b1448cc258b02b570ebf597 # Parent afa75a0c15f80fefb9189bcdaf74f33984eda3a7 (Fy_or_n_p): Use a popup menu if reached via mouse command. (Fyes_or_no_p): Likewise. diff -r afa75a0c15f8 -r b2cc63a56415 src/fns.c --- a/src/fns.c Thu Feb 24 06:22:50 1994 +0000 +++ b/src/fns.c Thu Feb 24 08:02:10 1994 +0000 @@ -1125,13 +1125,27 @@ while (1) { - cursor_in_echo_area = 1; - message ("%s(y or n) ", XSTRING (xprompt)->data); + if (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event)) + { + Lisp_Object pane, menu; + pane = Fcons (Fcons (build_string ("Yes"), Qt), + Fcons (Fcons (build_string ("No"), Qnil), + Qnil)); + menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil)); + obj = Fx_popup_menu (Qt, menu); + answer = !NILP (obj); + break; + } + else + { + cursor_in_echo_area = 1; + message ("%s(y or n) ", XSTRING (xprompt)->data); - obj = read_filtered_event (1, 0, 0); - cursor_in_echo_area = 0; - /* If we need to quit, quit with cursor_in_echo_area = 0. */ - QUIT; + obj = read_filtered_event (1, 0, 0); + cursor_in_echo_area = 0; + /* If we need to quit, quit with cursor_in_echo_area = 0. */ + QUIT; + } key = Fmake_vector (make_number (1), obj); def = Flookup_key (map, key); @@ -1209,14 +1223,35 @@ register Lisp_Object ans; Lisp_Object args[2]; struct gcpro gcpro1; + Lisp_Object menu; CHECK_STRING (prompt, 0); + if (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event)) + { + Lisp_Object pane, menu, obj; + pane = Fcons (Fcons (build_string ("Yes"), Qt), + Fcons (Fcons (build_string ("No"), Qnil), + Qnil)); + GCPRO1 (pane); + menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil)); + obj = Fx_popup_menu (Qt, menu); + if (!NILP (obj)) + { + prompt = build_string ("Confirm"); + menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil)); + obj = Fx_popup_menu (Qt, menu); + } + UNGCPRO; + return obj; + } + args[0] = prompt; args[1] = build_string ("(yes or no) "); prompt = Fconcat (2, args); GCPRO1 (prompt); + while (1) { ans = Fdowncase (Fread_from_minibuffer (prompt, Qnil, Qnil, Qnil,