From 0af912f093d946e3e518909cae43d5ed6f4fcab8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 23 Feb 2003 22:11:20 +0000 Subject: [PATCH] * keyboard.c (cancel_hourglass_unwind): New function. (command_loop_1): Cancel hourglass with unwind-protect. --- src/ChangeLog | 5 +++++ src/keyboard.c | 32 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 88d4dd3222a..3e056ced267 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2003-02-23 Jan Dj,Ad(Brv + + * keyboard.c (cancel_hourglass_unwind): New function. + (command_loop_1): Cancel hourglass with unwind-protect. + 2003-02-23 Richard M. Stallman * callint.c (fix_command): New subroutine, from Fcall_interactively. diff --git a/src/keyboard.c b/src/keyboard.c index ec723e3c658..17cc6787f7f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1353,6 +1353,15 @@ static int read_key_sequence P_ ((Lisp_Object *, int, Lisp_Object, 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 @@ command_loop_1 () /* Here for a command that isn't executed directly */ + { #ifdef HAVE_X_WINDOWS - if (display_hourglass_p - && NILP (Vexecuting_macro)) - start_hourglass (); + 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); + 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 @@ command_loop_1 () But don't cancel the hourglass within a macro just because a command in the macro finishes. */ if (NILP (Vexecuting_macro)) - cancel_hourglass (); + unbind_to (scount, Qnil); #endif + } } directly_done: ; current_kboard->Vlast_prefix_arg = Vcurrent_prefix_arg; -- 2.39.2