* 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.
This commit is contained in:
Masatake YAMATO 2005-06-07 14:32:23 +00:00
parent db853b7a75
commit 602907aea1
2 changed files with 31 additions and 10 deletions

View file

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

View file

@ -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. */