changeset 2719:340d7c6c8790

* keyboard.c (read_char): Exit kbd macro if Vexecuting_macro is t. * keyboard.c (do_mouse_tracking): Now static. * keyboard.c (read_char_menu_prompt): Expect Fx_popup_menu to return a list of events. Don't lose any of them.
author Jim Blandy <jimb@redhat.com>
date Mon, 10 May 1993 00:10:08 +0000
parents c91b18333f58
children ad53bd625e1c
files src/keyboard.c
diffstat 1 files changed, 17 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Sun May 09 23:54:12 1993 +0000
+++ b/src/keyboard.c	Mon May 10 00:10:08 1993 +0000
@@ -332,10 +332,10 @@
    dequeuing functions?  Such a flag could be screwed up by interrupts
    at inopportune times.  */
 
-/* If this flag is non-zero, we will check mouse_moved to see when the
+/* If this flag is non-zero, we check mouse_moved to see when the
    mouse moves, and motion events will appear in the input stream.  If
-   it is zero, mouse motion will be ignored.  */
-int do_mouse_tracking;
+   it is zero, mouse motion is ignored.  */
+static int do_mouse_tracking;
 
 /* The window system handling code should set this if the mouse has
    moved since the last call to the mouse_position_hook.  Calling that
@@ -1299,7 +1299,11 @@
       Vlast_event_frame = internal_last_event_frame = Qmacro;
 #endif
 
-      if (executing_macro_index >= XFASTINT (Flength (Vexecuting_macro)))
+      /* Exit the macro if we are at the end.
+	 Also, some things replace the macro with t
+	 to force an early exit.  */
+      if (EQ (Vexecuting_macro, Qt)
+	  || executing_macro_index >= XFASTINT (Flength (Vexecuting_macro)))
 	{
 	  XSET (c, Lisp_Int, -1);
 	  return c;
@@ -3154,6 +3158,15 @@
 	  realmaps[nmaps1++] = maps[mapno];
 
       value = Fx_popup_menu (prev_event, Flist (nmaps1, realmaps));
+      if (CONSP (value))
+	{
+	  /* If we got more than one event, put all but the first
+	     onto this list to be read later.
+	     Return just the first event now.  */
+	  unread_command_events
+	    = nconc2 (XCONS (value)->cdr, unread_command_events);
+	  value = XCONS (value)->car;
+	}
       if (NILP (value))
 	XSET (value, Lisp_Int, quit_char);
       if (used_mouse_menu)