Mercurial > emacs
changeset 49942:4c1f6a49e9a3
* keyboard.c (cancel_hourglass_unwind): New function.
(command_loop_1): Cancel hourglass with unwind-protect.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Sun, 23 Feb 2003 22:11:20 +0000 |
parents | 396c775bfdf2 |
children | f70ce138a267 |
files | src/ChangeLog src/keyboard.c |
diffstat | 2 files changed, 32 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sun Feb 23 19:26:08 2003 +0000 +++ b/src/ChangeLog Sun Feb 23 22:11:20 2003 +0000 @@ -1,3 +1,8 @@ +2003-02-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * keyboard.c (cancel_hourglass_unwind): New function. + (command_loop_1): Cancel hourglass with unwind-protect. + 2003-02-23 Richard M. Stallman <rms@gnu.org> * callint.c (fix_command): New subroutine, from Fcall_interactively.
--- a/src/keyboard.c Sun Feb 23 19:26:08 2003 +0000 +++ b/src/keyboard.c Sun Feb 23 22:11:20 2003 +0000 @@ -1353,6 +1353,15 @@ void safe_run_hooks P_ ((Lisp_Object)); static void adjust_point_for_property P_ ((int, int)); +/* Cancel hourglass from protect_unwind. + ARG is not used. */ +static Lisp_Object +cancel_hourglass_unwind (arg) + Lisp_Object arg; +{ + cancel_hourglass (); +} + Lisp_Object command_loop_1 () { @@ -1724,16 +1733,22 @@ /* Here for a command that isn't executed directly */ + { #ifdef HAVE_X_WINDOWS - if (display_hourglass_p - && NILP (Vexecuting_macro)) - start_hourglass (); -#endif - - nonundocount = 0; - if (NILP (current_kboard->Vprefix_arg)) - Fundo_boundary (); - Fcommand_execute (Vthis_command, Qnil, Qnil, Qnil); + int scount = SPECPDL_INDEX (); + + if (display_hourglass_p + && NILP (Vexecuting_macro)) + { + record_unwind_protect (cancel_hourglass_unwind, Qnil); + start_hourglass (); + } +#endif + + nonundocount = 0; + if (NILP (current_kboard->Vprefix_arg)) + Fundo_boundary (); + Fcommand_execute (Vthis_command, Qnil, Qnil, Qnil); #ifdef HAVE_X_WINDOWS /* Do not check display_hourglass_p here, because @@ -1742,8 +1757,9 @@ But don't cancel the hourglass within a macro just because a command in the macro finishes. */ if (NILP (Vexecuting_macro)) - cancel_hourglass (); -#endif + unbind_to (scount, Qnil); +#endif + } } directly_done: ; current_kboard->Vlast_prefix_arg = Vcurrent_prefix_arg;