diff options
author | Masatake YAMATO <[email protected]> | 2005-06-07 14:32:23 +0000 |
---|---|---|
committer | Masatake YAMATO <[email protected]> | 2005-06-07 14:32:23 +0000 |
commit | 602907aea1d3cbebcbe51ca1be18c043b5df3140 (patch) | |
tree | 724b27a249add2ff1fb6f2a3adae6c27c74310e1 | |
parent | db853b7a753cb38f082d26036a92b8982aeb5bf1 (diff) |
* 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.
-rw-r--r-- | src/ChangeLog | 7 | ||||
-rw-r--r-- | src/xdisp.c | 34 |
2 files changed, 31 insertions, 10 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 0651dc206a..003668db56 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2005-06-07 Masatake YAMATO <[email protected]> + + * 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 <[email protected]> * process.c: Improve commentary for adaptive read buffering. diff --git a/src/xdisp.c b/src/xdisp.c index c1ea2a9389..47421d1311 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -21491,10 +21491,8 @@ note_mode_line_or_margin_highlight (window, x, y, area) 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 @@ note_mode_line_or_margin_highlight (window, x, y, area) 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 @@ note_mouse_highlight (f, x, y) /* 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. */ |