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

From: Eli Zaretskii <[email-masked]>
Date: Fri, 18 Dec 2020 13:45:49 +0200

> Cc: [email-masked], [email-masked], [email-masked]
> From: martin rudalics <[email-masked]>
> Date: Fri, 18 Dec 2020 09:39:35 +0100
> 
>  > The non-selected frames shouldn't.  But the selected frame should,
>  > because it needs to re-evaluate its frame title.  And we don't have
>  > any means to tell the display engine to consider only the frame title
>  > on a single frame.  We only have the means to tell it which windows on
>  > which frames may need redrawing, but the frame's title doesn't belong
>  > to any window.
> 
> In redisplay_window we set
> 
>    update_mode_line = (w->update_mode_line
> 		      || update_mode_lines
> 
> where w is the window we redisplay because it got scrolled.  Later down
> we have
> 
>    if (update_mode_line
>        && EQ (FRAME_SELECTED_WINDOW (f), window))
>      {
>        ...
>        gui_consider_frame_title (w->frame);
> 
> so we do update the frame title after the frame's selected window got
> scrolled.  What am I missing?

This, I think:

  if (current_matrix_up_to_date_p
      && (rc = try_cursor_movement (window, startp, &temp_scroll_step),
	  rc != CURSOR_MOVEMENT_CANNOT_BE_USED))
    {
      switch (rc)
	{
	case CURSOR_MOVEMENT_SUCCESS:
	  used_current_matrix_p = true;
	  goto done;

IOW, we might think that nothing needs to be updated except perhaps
the cursor position, and then fail to update the frame's title.

And maybe there are more loopholes like this one, I didn't try to scan
the code too thoroughly.

>  >> Not in Fmake_frame_invisible AFAICT.
>  >>
>  >>   > although the comment seems to hint on the
>  >>   > reason.
>  >
>  > What about that comment? doesn't it explain the reason?  AFAIU, that
>  > reason is the need to re-evaluate the menu bar.
> 
> Because we just made a frame invisible?  The only thing we could grey
> out on a menu in such a case is C-x 5 o and that's not what I see.  And
> if it were there, we'd have to handle it in Fmake_frame_visible as well.

This code is old (1994), maybe it tries to handle a problem that no
longer exist?  Who knows how the Buffers menu looked back then?