Subject: Re: bug#42406: Mouse-wheel scrolling can be flickering

From: martin rudalics <[email-masked]>
Date: Thu, 17 Dec 2020 18:34:42 +0100

>> The part mostly affected would be
 >>
 >>     if (consider_all_windows_p)
 >>       {
 >>         FOR_EACH_FRAME (tail, frame)
 >> 	XFRAME (frame)->updated_p = false;
 >
 > You mean, it will not affect the following FOR_EACH_FRAME loop?  If
 > so, I don't think I follow.

It would affect it in the sense that not necessarily all frames are
considered.  But you sketched that already in your TODO entry.

 >> because windows_or_buffers_changed should probably become either a list
 >> too or redisplay would simply scan all windows and act when it finds a
 >> window whose w->update_mode_line or w->changed flag is true.
 >
 > I don't think windows are the problem: Emacs knows very well which
 > window(s) actually need(s) to be redisplayed and redrawn.

In the case at hand Emacs relies on redisplaying all frames when
scrolling a window that is not on the selected frame in order to
correctly reflect the change in the scrolled window's mode line.

 > The problem
 > is with frame decorations that don't belong to any window: there we
 > rely on the OS and the WM to refrain from redrawing stuff unless
 > really needed.

IIUC windows_or_buffers_changed affects frames as well.  For example, I
have no idea why making a frame (in)visible should redisplay all other
frames while moving a frame on the screen apparently does not.

martin