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

From: martin rudalics <[email-masked]>
Date: Fri, 18 Dec 2020 14:57:01 +0100

>> 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.

Just to make sure I understand your argument correctly: With my xdisp.c

   update_mode_line = (w->update_mode_line is on line 18065

   case CURSOR_MOVEMENT_SUCCESS: is on line 18458

   done: is on line 18929

   if (update_mode_line is on line 18975

   gui_consider_frame_title (w->frame); is on line 19020

so I can't see why a CURSOR_MOVEMENT_SUCCESS could bypass
gui_consider_frame_title.

martin