# HG changeset patch # User Kim F. Storm # Date 1152648566 0 # Node ID d76f16a63bf28dfcd3e5473e3540fc48cdeadb54 # Parent 205070e11ae30a91568546ade28b176b3417653c (sit_for): Reduce number of args from 5 to 3. Now just one TIMEOUT arg that can be a Lisp float or Lisp int. Combine args DISPLAY and INITIAL_DISPLAY into one arg DO_DISPLAY. Undo 2006-06-14 change for non-preemptive display if TIMEOUT < 0. The rework of sit_for args also fixes several incorrect Qt args which should have been 1. (Fredisplay): Pass 1 instead of Qt to swallow_events and detect_input_pending_run_timers. diff -r 205070e11ae3 -r d76f16a63bf2 src/dispnew.c --- a/src/dispnew.c Tue Jul 11 19:15:33 2006 +0000 +++ b/src/dispnew.c Tue Jul 11 20:09:26 2006 +0000 @@ -6495,27 +6495,40 @@ /* This is just like wait_reading_process_output, except that - it does redisplay. */ + it does redisplay. + + TIMEOUT is number of seconds to wait (float or integer). + READING is 1 if reading input. + If DO_DISPLAY is >0 display process output while waiting. + If DO_DISPLAY is >1 perform an initial redisplay before waiting. +*/ Lisp_Object -sit_for (sec, usec, reading, display, initial_display) - int sec, usec, reading, display, initial_display; +sit_for (timeout, reading, do_display) + Lisp_Object timeout; + int reading, do_display; { - int preempt = (sec > 0) || (sec == 0 && usec >= 0); - - swallow_events (display); - - if ((detect_input_pending_run_timers (display) && preempt) + int sec, usec; + + swallow_events (do_display); + + if ((detect_input_pending_run_timers (do_display)) || !NILP (Vexecuting_kbd_macro)) return Qnil; - if (initial_display) + if (do_display >= 2) + redisplay_preserve_echo_area (2); + + if (FLOATP (timeout)) { - int count = SPECPDL_INDEX (); - if (!preempt) - specbind (Qredisplay_dont_pause, Qt); - redisplay_preserve_echo_area (2); - unbind_to (count, Qnil); + double seconds = XFLOAT_DATA (timeout); + sec = (int) seconds; + usec = (int) ((seconds - sec) * 1000000); + } + else + { + sec = XFASTINT (timeout); + usec = 0; } if (sec == 0 && usec == 0) @@ -6525,7 +6538,7 @@ gobble_input (0); #endif - wait_reading_process_output (sec, usec, reading ? -1 : 1, display, + wait_reading_process_output (sec, usec, reading ? -1 : 1, do_display, Qnil, NULL, 0); return detect_input_pending () ? Qnil : Qt; @@ -6541,8 +6554,8 @@ { int count; - swallow_events (Qt); - if ((detect_input_pending_run_timers (Qt) + swallow_events (1); + if ((detect_input_pending_run_timers (1) && NILP (force) && !redisplay_dont_pause) || !NILP (Vexecuting_kbd_macro)) return Qnil;