changeset 37398:756d2f4e4058

(wait_reading_process_input): Call record_asynch_buffer_change after running timers, to make read_key_sequence aware of buffer changes from under it.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 19 Apr 2001 12:47:33 +0000
parents ec77fd25c155
children 9e11cb3d60f1
files src/process.c
diffstat 1 files changed, 46 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Thu Apr 19 07:36:35 2001 +0000
+++ b/src/process.c	Thu Apr 19 12:47:33 2001 +0000
@@ -2453,7 +2453,15 @@
 	  do
 	    {
 	      int old_timers_run = timers_run;
+	      
 	      timer_delay = timer_check (1);
+
+	      /* If a timer has run, this might have changed buffers
+		 an alike.  Make read_key_sequence aware of that.  */
+	      if (timers_run != old_timers_run
+		  && waiting_for_user_input_p == -1)
+		record_asynch_buffer_change ();
+	      
 	      if (timers_run != old_timers_run && do_display)
 		/* We must retry, since a timer may have requeued itself
 		   and that could alter the time_delay.  */
@@ -2667,14 +2675,28 @@
       /* If there is any, return immediately
 	 to give it higher priority than subprocesses */
 
-      if (XINT (read_kbd) != 0
-	  && detect_input_pending_run_timers (do_display))
+      if (XINT (read_kbd) != 0)
 	{
-	  swallow_events (do_display);
+	  int old_timers_run = timers_run;
+	  int leave = 0;
+	
 	  if (detect_input_pending_run_timers (do_display))
+	    {
+	      swallow_events (do_display);
+	      if (detect_input_pending_run_timers (do_display))
+		leave = 1;
+	    }
+
+	  /* If a timer has run, this might have changed buffers
+	     an alike.  Make read_key_sequence aware of that.  */
+	  if (timers_run != old_timers_run
+	      && waiting_for_user_input_p == -1)
+	    record_asynch_buffer_change ();
+
+	  if (leave)
 	    break;
-	}
-
+	}    
+      
       /* If there is unread keyboard input, also return.  */
       if (XINT (read_kbd) != 0
 	  && requeued_events_pending_p ())
@@ -4894,14 +4916,28 @@
 
       /* Check for keyboard input */
 
-      if ((XINT (read_kbd) != 0)
-	  && detect_input_pending_run_timers (do_display))
+      if (XINT (read_kbd) != 0)
 	{
-	  swallow_events (do_display);
+	  int old_timers_run = timers_run;
+	  int leave = 0;
+	
 	  if (detect_input_pending_run_timers (do_display))
+	    {
+	      swallow_events (do_display);
+	      if (detect_input_pending_run_timers (do_display))
+		leave = 1;
+	    }
+
+	  /* If a timer has run, this might have changed buffers
+	     an alike.  Make read_key_sequence aware of that.  */
+	  if (timers_run != old_timers_run
+	      && waiting_for_user_input_p == -1)
+	    record_asynch_buffer_change ();
+
+	  if (leave)
 	    break;
-	}
-
+	}    
+      
       /* If there is unread keyboard input, also return.  */
       if (XINT (read_kbd) != 0
 	  && requeued_events_pending_p ())