Subject: Re: bug#75931: 31.0.50; mouse-face and pointer properties make pointer change back and forth

From: Eli Zaretskii <[email-masked]>
Date: Sat, 01 Feb 2025 11:46:01 +0200

> Date: Fri, 31 Jan 2025 05:52:07 -0300
> Cc: [email-masked], [email-masked]
> From: Mauro Aranda <[email-masked]>
> 
> Eli Zaretskii <[email-masked]> writes:
> 
>  >> Date: Thu, 30 Jan 2025 17:41:02 -0300
>  >> Cc: [email-masked], [email-masked]
>  >> From: Mauro Aranda <[email-masked]>
>  >>
>  >> Eli Zaretskii <[email-masked]> writes:
>  >>
>  >>  > Please try the patch below.
>  >>
>  >> Thanks, but the issue remains after applying the patch.
>  >
>  > That probably means that one or more other calls to show_mouse_face
>  > need to be passed 'false' as the last argument.  Since AFAIU only the
>  > calls with DRAW_MOUSE_FACE can reset the mouse pointer back to the
>  > hand shape, those are the calls that are the suspects.  So please
>  > change each such call and see which additional one needs that.  I hope
>  > there's only one such call, so please change only one call at a time,
>  > each time returning the other calls to their current state.
> 
> It's the call at the end of mouse_face_from_buffer_pos.

I'm confused: didn't you say earlier in this discussion that removing
this call to show_mouse_face in erase_phys_cursor:

  #ifdef HAVE_WINDOW_SYSTEM
    /* Since erasing the phys cursor will probably lead to corruption of
       the mouse face display if the glyph's pixel_width is not kept up
       to date with the :box property of the mouse face, just redraw the
       mouse face, but leave the mouse cursor as it was.  */
    if (FRAME_WINDOW_P (WINDOW_XFRAME (w)) && mouse_face_here_p)
      {
	w->phys_cursor_on_p = false;
	w->phys_cursor_type = NO_CURSOR;
	show_mouse_face (MOUSE_HL_INFO (WINDOW_XFRAME (w)), DRAW_MOUSE_FACE,
			 false);
	return;
      }
  #endif

solves the problem?  Is that still the case with the current code?