Mercurial > emacs
changeset 63115:9698305b2fc0
* xdisp.c (note_mode_line_or_margin_highlight): Check
the overlapping of re-rendering area to avoid flickering.
(note_mouse_highlight): Call clear_mouse_face if PART
is not ON_MODE_LINE nor ON_HEADER_LINE.
author | Masatake YAMATO <jet@gyve.org> |
---|---|
date | Tue, 07 Jun 2005 14:32:23 +0000 |
parents | 6ef9e44e50d7 |
children | 5f15b57e99a6 |
files | src/ChangeLog src/xdisp.c |
diffstat | 2 files changed, 31 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Tue Jun 07 13:19:25 2005 +0000 +++ b/src/ChangeLog Tue Jun 07 14:32:23 2005 +0000 @@ -1,3 +1,10 @@ +2005-06-07 Masatake YAMATO <jet@gyve.org> + + * xdisp.c (note_mode_line_or_margin_highlight): Check + the overlapping of re-rendering area to avoid flickering. + (note_mouse_highlight): Call clear_mouse_face if PART + is not ON_MODE_LINE nor ON_HEADER_LINE. + 2005-06-07 Kim F. Storm <storm@cua.dk> * process.c: Improve commentary for adaptive read buffering.
--- a/src/xdisp.c Tue Jun 07 13:19:25 2005 +0000 +++ b/src/xdisp.c Tue Jun 07 14:32:23 2005 +0000 @@ -21491,10 +21491,8 @@ int total_pixel_width; int ignore; - - if (clear_mouse_face (dpyinfo)) - cursor = No_Cursor; - + int vpos, hpos; + b = Fprevious_single_property_change (make_number (charpos + 1), Qmouse_face, string, Qnil); if (NILP (b)) @@ -21537,15 +21535,30 @@ for (tmp_glyph = glyph - gpos; tmp_glyph != glyph; tmp_glyph++) total_pixel_width += tmp_glyph->pixel_width; - dpyinfo->mouse_face_beg_col = (x - gpos); - dpyinfo->mouse_face_beg_row = (area == ON_MODE_LINE - ? (w->current_matrix)->nrows - 1 - : 0); + /* Pre calculation of re-rendering position */ + vpos = (x - gpos); + hpos = (area == ON_MODE_LINE + ? (w->current_matrix)->nrows - 1 + : 0); + + /* If the re-rendering position is included in the last + re-rendering area, we should do nothing. */ + if ( window == dpyinfo->mouse_face_window + && dpyinfo->mouse_face_beg_col <= vpos + && vpos < dpyinfo->mouse_face_end_col + && dpyinfo->mouse_face_beg_row == hpos ) + return; + + if (clear_mouse_face (dpyinfo)) + cursor = No_Cursor; + + dpyinfo->mouse_face_beg_col = vpos; + dpyinfo->mouse_face_beg_row = hpos; dpyinfo->mouse_face_beg_x = original_x_pixel - (total_pixel_width + dx); dpyinfo->mouse_face_beg_y = 0; - dpyinfo->mouse_face_end_col = (x - gpos) + gseq_length; + dpyinfo->mouse_face_end_col = vpos + gseq_length; dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_beg_row; dpyinfo->mouse_face_end_x = 0; @@ -21617,7 +21630,8 @@ /* If we were displaying active text in another window, clear that. Also clear if we move out of text area in same window. */ if (! EQ (window, dpyinfo->mouse_face_window) - || (part != ON_TEXT && !NILP (dpyinfo->mouse_face_window))) + || (part != ON_TEXT && part != ON_MODE_LINE && part != ON_HEADER_LINE + && !NILP (dpyinfo->mouse_face_window))) clear_mouse_face (dpyinfo); /* Not on a window -> return. */