Subject: Re: bug#15999: 24.3.50; Redisplay broken with split windows

From: Stefan Monnier <[email-masked]>
Date: Fri, 29 Nov 2013 13:01:03 -0500

> 115272: Stefan Monnier 2013-11-28 Refine redisplay optimizations to only
> redisplay *some* frames/windows

Sounds highly likely, indeed.

> 0. emacs -Q
> 1. M-x display-time-mode
> 3. C-x 2 (or C- x 3)
> 4. C-x b, so one window displays *scratch* and the other *Messages*.
> 5. When the displayed time changes, only the current buffer is updated;
>    in the other buffer the time display is unchanged, and the scroll bar
>    disappears (note my build does not use toolkit scroll bars, I don't
>    know if that makes a differences.)  This states of affairs remains
>    until the non-updated buffer becomes current.

- The mode-line not being redrawn in the other window is expected.
  The patch below should fix it.
- But for some reason I couldn't reproduce it (looks like something
  somewhere in my tests is causing the extra redisplay needed).
  Ah, I could reproduce it by building --without-toolkit-scroll-bars, so
  it looks like the presence of toolkit scrollbars somehow plays an
  important role.
- The scroll-bar disappearance is not expected.  If the patch below
  makes this problem disappear, it's only because it hides it, not
  because it fixes it.

        Stefan

=== modified file 'lisp/time.el'
--- lisp/time.el	2013-08-09 18:49:36 +0000
+++ lisp/time.el	2013-11-29 17:43:47 +0000
@@ -471,7 +471,7 @@
     ;; This is inside the let binding, but we are not going to document
     ;; what variables are available.
     (run-hooks 'display-time-hook))
-  (force-mode-line-update))
+  (force-mode-line-update 'all))
 
 (defun display-time-file-nonempty-p (file)
   (let ((remote-file-name-inhibit-cache (- display-time-interval 5)))