]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix hourglass problems
authorJan Djärv <jan.h.d@swipnet.se>
Sat, 8 Mar 2003 10:43:36 +0000 (10:43 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Sat, 8 Mar 2003 10:43:36 +0000 (10:43 +0000)
src/ChangeLog
src/keyboard.c
src/lread.c

index c7c102df01a55948ec16b05e8feee750eccc7bca..574d0e37a7c693daa20fa6678c8bff6907ddc4d7 100644 (file)
@@ -1,3 +1,10 @@
+2003-03-08  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * keyboard.c (cancel_hourglass_unwind): New function.
+       (command_loop_1): Cancel hourglass with unwind-protect.
+
+       * lread.c (read_filtered_event): Remove call to start_hourglass.
+
 2003-03-07  Kenichi Handa  <handa@etlken2>
 
        * coding.c (CODING_ADD_COMPOSITION_COMPONENT): If the number of
index c1b02eb452024dcb0324326141833903d634a726..9d5e8ed4ac670df74870ca2121473d070b248140 100644 (file)
@@ -1309,6 +1309,17 @@ 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));
 
+/* Cancel hourglass from protect_unwind.
+   ARG is not used.  */
+#ifdef HAVE_X_WINDOWS
+static Lisp_Object
+cancel_hourglass_unwind (arg)
+     Lisp_Object arg;
+{
+  cancel_hourglass ();
+}
+#endif
+
 Lisp_Object
 command_loop_1 ()
 {
@@ -1632,21 +1643,28 @@ command_loop_1 ()
            }
 
          /* Here for a command that isn't executed directly */
-
+          
+          {
 #ifdef HAVE_X_WINDOWS
-         if (display_hourglass_p)
-           start_hourglass ();
+            int scount = specpdl_ptr - specpdl;
+
+            if (display_hourglass_p)
+              {
+                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
-         if (display_hourglass_p)
-           cancel_hourglass ();
+            if (display_hourglass_p)
+              unbind_to (scount, Qnil);
 #endif
+          }
        }
     directly_done: ;
       current_kboard->Vlast_prefix_arg = Vcurrent_prefix_arg;
index 834fb5d5109db5fada00c27ac4a5fab3b44f7ea4..fc571027341cadf6fe1f447cde7eea7bc74b3ce6 100644 (file)
@@ -489,10 +489,6 @@ read_filtered_event (no_switch_frame, ascii_required, error_nonascii,
   if (! NILP (delayed_switch_frame))
     unread_switch_frame = delayed_switch_frame;
 
-#ifdef HAVE_WINDOW_SYSTEM
-  if (display_hourglass_p)
-    start_hourglass ();
-#endif
   return val;
 }