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;