Subject: bug#17588: 24.3.91; mouse-face glitchy

From: Christopher Schmidt <[email-masked]>
Date: Mon, 26 May 2014 16:17:11 -0400 (EDT)

Eli Zaretskii <[email-masked]> writes:
> Another thought is to see whether the function that paints and clears
> the mouse highlight is called when it should be.  You could add some
> printf to note_mouse_highlight, where it calls show_mouse_face and
> clear_mouse_face, and see if the corresponding print-outs are visible
> when they should be.  E.g., if you move the mouse pointer from one
> line of text with mouse face to another, you should see a call that
> clears mouse face on the previous line and shows it on the current
> one.

It does not look like there are calls missing.

Whenever the faulty behaviour is present, in clear_mouse_face
NILP (hlinfo->mouse_face_window) is always true and therefore the
highlighting is not cleared.

clear_mouse_face w/ bug:

    (gdb) p *hlinfo
     {mouse_face_beg_row = -1, mouse_face_beg_col = -1, mouse_face_beg_x = 37,
      mouse_face_end_row = -1, mouse_face_end_col = -1, mouse_face_end_x = 0,
      mouse_face_window = 12026738, mouse_face_face_id = 34, mouse_face_overlay = 12026738,
      mouse_face_mouse_frame = 0x1129898, mouse_face_mouse_x = -1, mouse_face_mouse_y = -1,
      mouse_face_past_end = false, mouse_face_defer = false, mouse_face_hidden = false}
    (gdb) p NILP (hlinfo->mouse_face_window)
     true

clear_mouse_face w/o bug:

    (gdb) p *hlinfo
     {mouse_face_beg_row = 8, mouse_face_beg_col = 0, mouse_face_beg_x = 0,
      mouse_face_end_row = 8, mouse_face_end_col = 9, mouse_face_end_x = 81,
      mouse_face_window = 18061725, mouse_face_face_id = 25, mouse_face_overlay = 12026738,
      mouse_face_mouse_frame = 0x1129898, mouse_face_mouse_x = 394, mouse_face_mouse_y = 393,
      mouse_face_past_end = false, mouse_face_defer = false,
      mouse_face_hidden = false}
    (gdb) p NILP (hlinfo->mouse_face_window)
     false