]> git.eshelyaron.com Git - emacs.git/commitdiff
(redisplay_internal): Do the
authorGerd Moellmann <gerd@gnu.org>
Wed, 21 Feb 2001 16:20:24 +0000 (16:20 +0000)
committerGerd Moellmann <gerd@gnu.org>
Wed, 21 Feb 2001 16:20:24 +0000 (16:20 +0000)
mark_window_display_accurate after all windows have been
redisplayed because this call resets flags in buffers which are
needed for proper redisplay.

src/ChangeLog
src/xdisp.c

index 2253c41fcb682bf40c879d6a9c948fb22b5c6f1e..6345e0d7c4ee02ff0e0ba3f170871f346dac87c5 100644 (file)
@@ -1,5 +1,10 @@
 2001-02-21  Gerd Moellmann  <gerd@gnu.org>
 
+       * xdisp.c (redisplay_internal): Do the
+       mark_window_display_accurate after all windows have been
+       redisplayed because this call resets flags in buffers which are
+       needed for proper redisplay.
+
        * keyboard.c, minibuf.c, lread.c, fns.c, eval.c: Use
        display_hourglass_p, start_hourglass, cancel_hourglass instead of
        the old names.
index b693e26bb224ca2e16002bec1cc642ac9e334bea..3cc2dd52e210a6a71dabdde5f3ec21a12b9a33e7 100644 (file)
@@ -8374,6 +8374,9 @@ redisplay_internal (preserve_echo_area)
   if (consider_all_windows_p)
     {
       Lisp_Object tail, frame;
+      int i, n = 0, size = 50;
+      struct frame **updated
+       = (struct frame **) alloca (size * sizeof *updated);
 
       /* Clear the face cache eventually.  */
       if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
@@ -8429,12 +8432,29 @@ redisplay_internal (preserve_echo_area)
                  if (pause)
                    break;
 
-                 mark_window_display_accurate (f->root_window, 1);
-                 if (frame_up_to_date_hook)
-                   frame_up_to_date_hook (f);
+                 if (n == size)
+                   {
+                     int nbytes = size * sizeof *updated;
+                     struct frame **p = (struct frame **) alloca (2 * nbytes);
+                     bcopy (updated, p, nbytes);
+                     size *= 2;
+                   }
+                 
+                 updated[n++] = f;
                }
            }
        }
+
+      /* Do the mark_window_display_accurate after all windows have
+        been redisplayed because this call resets flags in buffers
+        which are needed for proper redisplay.  */
+      for (i = 0; i < n; ++i)
+       {
+         struct frame *f = updated[i];
+         mark_window_display_accurate (f->root_window, 1);
+         if (frame_up_to_date_hook)
+           frame_up_to_date_hook (f);
+       }
     }
   else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
     {