Commit 5489860b authored by Paul Eggert's avatar Paul Eggert
Browse files

* xdisp.c: Rename or move local decls to avoid shadowing.

(init_iterator, handle_fontified_prop, handle_single_display_spec):
(message_dolog, message_with_string, redisplay_internal):
(redisplay_window, try_window_reusing_current_matrix, try_window_id):
(compute_line_metrics, highlight_trailing_whitespace, cursor_row_p):
(display_line, display_string, rows_from_pos_range):
(mouse_face_from_buffer_pos, note_mouse_highlight, expose_frame):
Rename or move local decls.
parent 257219bd
2011-03-06 Paul Eggert <eggert@cs.ucla.edu>
* xdisp.c: Rename or move local decls to avoid shadowing.
(init_iterator, handle_fontified_prop, handle_single_display_spec):
(message_dolog, message_with_string, redisplay_internal):
(redisplay_window, try_window_reusing_current_matrix, try_window_id):
(compute_line_metrics, highlight_trailing_whitespace, cursor_row_p):
(display_line, display_string, rows_from_pos_range):
(mouse_face_from_buffer_pos, note_mouse_highlight, expose_frame):
Rename or move local decls.
2011-03-02 Paul Eggert <eggert@cs.ucla.edu>
 
Work around some portability problems with symlinks.
......@@ -2477,9 +2477,9 @@ init_iterator (struct it *it, struct window *w,
&& WINDOWP (minibuf_selected_window)
&& w == XWINDOW (minibuf_selected_window))))
{
EMACS_INT charpos = marker_position (BVAR (current_buffer, mark));
it->region_beg_charpos = min (PT, charpos);
it->region_end_charpos = max (PT, charpos);
EMACS_INT markpos = marker_position (BVAR (current_buffer, mark));
it->region_beg_charpos = min (PT, markpos);
it->region_end_charpos = max (PT, markpos);
}
else
it->region_beg_charpos = it->region_end_charpos = -1;
......@@ -3183,11 +3183,11 @@ handle_fontified_prop (struct it *it)
safe_call1 (val, pos);
else
{
Lisp_Object globals, fn;
Lisp_Object fns, fn;
struct gcpro gcpro1, gcpro2;
 
globals = Qnil;
GCPRO2 (val, globals);
fns = Qnil;
GCPRO2 (val, fns);
 
for (; CONSP (val); val = XCDR (val))
{
......@@ -3200,11 +3200,11 @@ handle_fontified_prop (struct it *it)
In a global value, t should not occur. If it
does, we must ignore it to avoid an endless
loop. */
for (globals = Fdefault_value (Qfontification_functions);
CONSP (globals);
globals = XCDR (globals))
for (fns = Fdefault_value (Qfontification_functions);
CONSP (fns);
fns = XCDR (fns))
{
fn = XCAR (globals);
fn = XCAR (fns);
if (!EQ (fn, Qt))
safe_call1 (fn, pos);
}
......@@ -3989,12 +3989,12 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object,
else if (NUMBERP (it->font_height))
{
/* Value is a multiple of the canonical char height. */
struct face *face;
struct face *f;
 
face = FACE_FROM_ID (it->f,
f = FACE_FROM_ID (it->f,
lookup_basic_face (it->f, DEFAULT_FACE_ID));
new_height = (XFLOATINT (it->font_height)
* XINT (face->lface[LFACE_HEIGHT_INDEX]));
* XINT (f->lface[LFACE_HEIGHT_INDEX]));
}
else
{
......@@ -7982,7 +7982,7 @@ message_dolog (const char *m, EMACS_INT nbytes, int nlflag, int multibyte)
if (nlflag)
{
EMACS_INT this_bol, this_bol_byte, prev_bol, prev_bol_byte;
int dup;
int dups;
insert_1 ("\n", 1, 1, 0, 0);
 
scan_newline (Z, Z_BYTE, BEG, BEG_BYTE, -2, 0);
......@@ -7997,20 +7997,20 @@ message_dolog (const char *m, EMACS_INT nbytes, int nlflag, int multibyte)
prev_bol = PT;
prev_bol_byte = PT_BYTE;
 
dup = message_log_check_duplicate (prev_bol, prev_bol_byte,
dups = message_log_check_duplicate (prev_bol, prev_bol_byte,
this_bol, this_bol_byte);
if (dup)
if (dups)
{
del_range_both (prev_bol, prev_bol_byte,
this_bol, this_bol_byte, 0);
if (dup > 1)
if (dups > 1)
{
char dupstr[40];
int duplen;
 
/* If you change this format, don't forget to also
change message_log_check_duplicate. */
sprintf (dupstr, " [%d times]", dup);
sprintf (dupstr, " [%d times]", dups);
duplen = strlen (dupstr);
TEMP_SET_PT_BOTH (Z - 1, Z_BYTE - 1);
insert_1 (dupstr, duplen, 1, 0, 1);
......@@ -8340,20 +8340,20 @@ message_with_string (const char *m, Lisp_Object string, int log)
cmd_error, so this must be just an informative message; toss it. */
if (FRAME_MESSAGE_BUF (f))
{
Lisp_Object args[2], message;
Lisp_Object args[2], msg;
struct gcpro gcpro1, gcpro2;
 
args[0] = build_string (m);
args[1] = message = string;
GCPRO2 (args[0], message);
args[1] = msg = string;
GCPRO2 (args[0], msg);
gcpro1.nvars = 2;
 
message = Fformat (2, args);
msg = Fformat (2, args);
 
if (log)
message3 (message, SBYTES (message), STRING_MULTIBYTE (message));
message3 (msg, SBYTES (msg), STRING_MULTIBYTE (msg));
else
message3_nolog (message, SBYTES (message), STRING_MULTIBYTE (message));
message3_nolog (msg, SBYTES (msg), STRING_MULTIBYTE (msg));
 
UNGCPRO;
 
......@@ -11420,8 +11420,8 @@ redisplay_internal (int preserve_echo_area)
{
struct window *w = XWINDOW (selected_window);
struct window *sw;
struct frame *f;
int pause;
struct frame *fr;
int pending;
int must_finish = 0;
struct text_pos tlbufpos, tlendpos;
int number_of_visible_frames;
......@@ -11446,10 +11446,10 @@ redisplay_internal (int preserve_echo_area)
/* Don't examine these until after testing Vinhibit_redisplay.
When Emacs is shutting down, perhaps because its connection to
X has dropped, we should not look at them at all. */
f = XFRAME (w->frame);
fr = XFRAME (w->frame);
sf = SELECTED_FRAME ();
 
if (!f->glyphs_initialized_p)
if (!fr->glyphs_initialized_p)
return;
 
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS)
......@@ -11491,7 +11491,7 @@ redisplay_internal (int preserve_echo_area)
may need to run Elisp code (via prepare_menu_bars). */
select_frame_for_redisplay (old_frame);
 
pause = 0;
pending = 0;
reconsider_clip_changes (w, current_buffer);
last_escape_glyph_frame = NULL;
last_escape_glyph_face_id = (1 << FACE_ID_BITS);
......@@ -11963,7 +11963,7 @@ redisplay_internal (int preserve_echo_area)
 
/* Update the display. */
set_window_update_flags (XWINDOW (f->root_window), 1);
pause |= update_frame (f, 0, 0);
pending |= update_frame (f, 0, 0);
f->updated_p = 1;
}
}
......@@ -11977,7 +11977,7 @@ redisplay_internal (int preserve_echo_area)
select_frame_for_redisplay (old_frame);
eassert (EQ (XFRAME (selected_frame)->selected_window, selected_window));
 
if (!pause)
if (!pending)
{
/* Do the mark_window_display_accurate after all windows have
been redisplayed because this call resets flags in buffers
......@@ -12026,7 +12026,7 @@ redisplay_internal (int preserve_echo_area)
goto retry;
 
XWINDOW (selected_window)->must_be_updated_p = 1;
pause = update_frame (sf, 0, 0);
pending = update_frame (sf, 0, 0);
}
 
/* We may have called echo_area_display at the top of this
......@@ -12040,15 +12040,15 @@ redisplay_internal (int preserve_echo_area)
if (mini_frame != sf && FRAME_WINDOW_P (mini_frame))
{
XWINDOW (mini_window)->must_be_updated_p = 1;
pause |= update_frame (mini_frame, 0, 0);
if (!pause && hscroll_windows (mini_window))
pending |= update_frame (mini_frame, 0, 0);
if (!pending && hscroll_windows (mini_window))
goto retry;
}
}
 
/* If display was paused because of pending input, make sure we do a
thorough update the next time. */
if (pause)
if (pending)
{
/* Prevent the optimization at the beginning of
redisplay_internal that tries a single-line update of the
......@@ -12098,7 +12098,7 @@ redisplay_internal (int preserve_echo_area)
redisplay constructing glyphs, so simply exposing a frame won't
display anything in this case. So, we have to display these
frames here explicitly. */
if (!pause)
if (!pending)
{
Lisp_Object tail, frame;
int new_count = 0;
......@@ -12126,7 +12126,7 @@ redisplay_internal (int preserve_echo_area)
 
/* If we just did a pending size change, or have additional
visible frames, or selected_window changed, redisplay again. */
if ((windows_or_buffers_changed && !pause)
if ((windows_or_buffers_changed && !pending)
|| (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw))
goto retry;
 
......@@ -13719,7 +13719,6 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
int buffer_unchanged_p = 0;
int temp_scroll_step = 0;
int count = SPECPDL_INDEX ();
int rc;
int centering_position = -1;
int last_line_misfit = 0;
EMACS_INT beg_unchanged, end_unchanged;
......@@ -14032,12 +14031,15 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
/* Handle case where text has not changed, only point, and it has
not moved off the frame, and we are not retrying after hscroll.
(current_matrix_up_to_date_p is nonzero when retrying.) */
if (current_matrix_up_to_date_p
&& (rc = try_cursor_movement (window, startp, &temp_scroll_step),
rc != CURSOR_MOVEMENT_CANNOT_BE_USED))
if (current_matrix_up_to_date_p)
{
int rc = try_cursor_movement (window, startp, &temp_scroll_step);
switch (rc)
{
case CURSOR_MOVEMENT_CANNOT_BE_USED:
break;
case CURSOR_MOVEMENT_SUCCESS:
used_current_matrix_p = 1;
goto done;
......@@ -14597,7 +14599,7 @@ static int
try_window_reusing_current_matrix (struct window *w)
{
struct frame *f = XFRAME (w->frame);
struct glyph_row *row, *bottom_row;
struct glyph_row *bottom_row;
struct it it;
struct run run;
struct text_pos start, new_start;
......@@ -14706,6 +14708,8 @@ try_window_reusing_current_matrix (struct window *w)
have at least one reusable row. */
if (it.current_y < it.last_visible_y)
{
struct glyph_row *row;
/* IT.vpos always starts from 0; it counts text lines. */
nrows_scrolled = it.vpos - (start_row - MATRIX_FIRST_TEXT_ROW (w->current_matrix));
 
......@@ -15491,41 +15495,41 @@ try_window_id (struct window *w)
|| (last_changed_charpos < CHARPOS (start) - 1
&& FETCH_BYTE (BYTEPOS (start) - 1) == '\n')))
{
EMACS_INT Z_old, delta, Z_BYTE_old, delta_bytes;
EMACS_INT Z_old, Z_delta, Z_BYTE_old, Z_delta_bytes;
struct glyph_row *r0;
 
/* Compute how many chars/bytes have been added to or removed
from the buffer. */
Z_old = MATRIX_ROW_END_CHARPOS (row) + XFASTINT (w->window_end_pos);
Z_BYTE_old = MATRIX_ROW_END_BYTEPOS (row) + w->window_end_bytepos;
delta = Z - Z_old;
delta_bytes = Z_BYTE - Z_BYTE_old;
Z_delta = Z - Z_old;
Z_delta_bytes = Z_BYTE - Z_BYTE_old;
 
/* Give up if PT is not in the window. Note that it already has
been checked at the start of try_window_id that PT is not in
front of the window start. */
if (PT >= MATRIX_ROW_END_CHARPOS (row) + delta)
if (PT >= MATRIX_ROW_END_CHARPOS (row) + Z_delta)
GIVE_UP (13);
 
/* If window start is unchanged, we can reuse the whole matrix
as is, after adjusting glyph positions. No need to compute
the window end again, since its offset from Z hasn't changed. */
r0 = MATRIX_FIRST_TEXT_ROW (current_matrix);
if (CHARPOS (start) == MATRIX_ROW_START_CHARPOS (r0) + delta
&& BYTEPOS (start) == MATRIX_ROW_START_BYTEPOS (r0) + delta_bytes
if (CHARPOS (start) == MATRIX_ROW_START_CHARPOS (r0) + Z_delta
&& BYTEPOS (start) == MATRIX_ROW_START_BYTEPOS (r0) + Z_delta_bytes
/* PT must not be in a partially visible line. */
&& !(PT >= MATRIX_ROW_START_CHARPOS (row) + delta
&& !(PT >= MATRIX_ROW_START_CHARPOS (row) + Z_delta
&& MATRIX_ROW_BOTTOM_Y (row) > window_text_bottom_y (w)))
{
/* Adjust positions in the glyph matrix. */
if (delta || delta_bytes)
if (Z_delta || Z_delta_bytes)
{
struct glyph_row *r1
= MATRIX_BOTTOM_TEXT_ROW (current_matrix, w);
increment_matrix_positions (w->current_matrix,
MATRIX_ROW_VPOS (r0, current_matrix),
MATRIX_ROW_VPOS (r1, current_matrix),
delta, delta_bytes);
Z_delta, Z_delta_bytes);
}
 
/* Set the cursor. */
......@@ -15841,9 +15845,9 @@ try_window_id (struct window *w)
{
/* Terminal frame. In this case, dvpos gives the number of
lines to scroll by; dvpos < 0 means scroll up. */
int first_unchanged_at_end_vpos
int from_vpos
= MATRIX_ROW_VPOS (first_unchanged_at_end_row, w->current_matrix);
int from = WINDOW_TOP_EDGE_LINE (w) + first_unchanged_at_end_vpos;
int from = WINDOW_TOP_EDGE_LINE (w) + from_vpos;
int end = (WINDOW_TOP_EDGE_LINE (w)
+ (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0)
+ window_internal_height (w));
......@@ -16574,7 +16578,6 @@ static void
compute_line_metrics (struct it *it)
{
struct glyph_row *row = it->glyph_row;
int area, i;
 
if (FRAME_WINDOW_P (it->f))
{
......@@ -16639,6 +16642,8 @@ compute_line_metrics (struct it *it)
}
 
/* Compute a hash code for this row. */
{
int area, i;
row->hash = 0;
for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
for (i = 0; i < row->used[area]; ++i)
......@@ -16647,6 +16652,7 @@ compute_line_metrics (struct it *it)
+ row->glyphs[area][i].face_id
+ row->glyphs[area][i].padding_p
+ (row->glyphs[area][i].type << 2));
}
 
it->max_ascent = it->max_descent = 0;
it->max_phys_ascent = it->max_phys_descent = 0;
......@@ -16979,7 +16985,7 @@ highlight_trailing_whitespace (struct frame *f, struct glyph_row *row)
static int
cursor_row_p (struct window *w, struct glyph_row *row)
{
int cursor_row_p = 1;
int result = 1;
 
if (PT == CHARPOS (row->end.pos))
{
......@@ -16992,7 +16998,7 @@ cursor_row_p (struct window *w, struct glyph_row *row)
if (CHARPOS (row->end.string_pos) >= 0)
{
if (row->continued_p)
cursor_row_p = 1;
result = 1;
else
{
/* Check for `display' property. */
......@@ -17000,14 +17006,14 @@ cursor_row_p (struct window *w, struct glyph_row *row)
struct glyph *end = beg + row->used[TEXT_AREA] - 1;
struct glyph *glyph;
 
cursor_row_p = 0;
result = 0;
for (glyph = end; glyph >= beg; --glyph)
if (STRINGP (glyph->object))
{
Lisp_Object prop
= Fget_char_property (make_number (PT),
Qdisplay, Qnil);
cursor_row_p =
result =
(!NILP (prop)
&& display_prop_string_p (prop, glyph->object));
break;
......@@ -17021,23 +17027,23 @@ cursor_row_p (struct window *w, struct glyph_row *row)
That's because CHARPOS (ROW->end.pos) would equal
PT if PT is before the character. */
if (!row->ends_in_ellipsis_p)
cursor_row_p = row->continued_p;
result = row->continued_p;
else
/* If the row ends in an ellipsis, then
CHARPOS (ROW->end.pos) will equal point after the
invisible text. We want that position to be displayed
after the ellipsis. */
cursor_row_p = 0;
result = 0;
}
/* If the row ends at ZV, display the cursor at the end of that
row instead of at the start of the row below. */
else if (row->ends_at_zv_p)
cursor_row_p = 1;
result = 1;
else
cursor_row_p = 0;
result = 0;
}
 
return cursor_row_p;
return result;
}
 
......@@ -17345,7 +17351,7 @@ display_line (struct it *it)
while (1)
{
int n_glyphs_before, hpos_before, x_before;
int x, i, nglyphs;
int x, nglyphs;
int ascent = 0, descent = 0, phys_ascent = 0, phys_descent = 0;
 
/* Retrieve the next thing to display. Value is zero if end of
......@@ -17470,7 +17476,7 @@ display_line (struct it *it)
}
else
{
int new_x;
int i, new_x;
struct glyph *glyph;
 
for (i = 0; i < nglyphs; ++i, x = new_x)
......@@ -19924,16 +19930,16 @@ display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_st
{
if (!FRAME_WINDOW_P (it->f))
{
int i, n;
int ii, n;
 
if (it->current_x > it->last_visible_x)
{
for (i = row->used[TEXT_AREA] - 1; i > 0; --i)
if (!CHAR_GLYPH_PADDING_P (row->glyphs[TEXT_AREA][i]))
for (ii = row->used[TEXT_AREA] - 1; ii > 0; --ii)
if (!CHAR_GLYPH_PADDING_P (row->glyphs[TEXT_AREA][ii]))
break;
for (n = row->used[TEXT_AREA]; i < n; ++i)
for (n = row->used[TEXT_AREA]; ii < n; ++ii)
{
row->used[TEXT_AREA] = i;
row->used[TEXT_AREA] = ii;
produce_special_glyphs (it, IT_TRUNCATION);
}
}
......@@ -24197,7 +24203,7 @@ rows_from_pos_range (struct window *w,
for the overlay or run of text properties specifying the mouse
face. BEFORE_STRING and AFTER_STRING, if non-nil, are a
before-string and after-string that must also be highlighted.
DISPLAY_STRING, if non-nil, is a display string that may cover some
COVER_STRING, if non-nil, is a display string that may cover some
or all of the highlighted text. */
 
static void
......@@ -24208,7 +24214,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
EMACS_INT end_charpos,
Lisp_Object before_string,
Lisp_Object after_string,
Lisp_Object display_string)
Lisp_Object cover_string)
{
struct window *w = XWINDOW (window);
struct glyph_row *first = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
......@@ -24217,7 +24223,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
EMACS_INT ignore, pos;
int x;
 
xassert (NILP (display_string) || STRINGP (display_string));
xassert (NILP (cover_string) || STRINGP (cover_string));
xassert (NILP (before_string) || STRINGP (before_string));
xassert (NILP (after_string) || STRINGP (after_string));
 
......@@ -24227,7 +24233,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
r1 = MATRIX_ROW (w->current_matrix, XFASTINT (w->window_end_vpos));
/* If the before-string or display-string contains newlines,
rows_from_pos_range skips to its last row. Move back. */
if (!NILP (before_string) || !NILP (display_string))
if (!NILP (before_string) || !NILP (cover_string))
{
struct glyph_row *prev;
while ((prev = r1 - 1, prev >= first)
......@@ -24239,7 +24245,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
while (--glyph >= beg && INTEGERP (glyph->object));
if (glyph < beg
|| !(EQ (glyph->object, before_string)
|| EQ (glyph->object, display_string)))
|| EQ (glyph->object, cover_string)))
break;
r1 = prev;
}
......@@ -24282,7 +24288,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
hlinfo->mouse_face_end_row = MATRIX_ROW_VPOS (r2, w->current_matrix);
 
/* For a bidi-reordered row, the positions of BEFORE_STRING,
AFTER_STRING, DISPLAY_STRING, START_CHARPOS, and END_CHARPOS
AFTER_STRING, COVER_STRING, START_CHARPOS, and END_CHARPOS
could be anywhere in the row and in any order. The strategy
below is to find the leftmost and the rightmost glyph that
belongs to either of these 3 strings, or whose position is
......@@ -24308,11 +24314,11 @@ mouse_face_from_buffer_pos (Lisp_Object window,
x += glyph->pixel_width;
 
/* Scan the glyph row, looking for BEFORE_STRING, AFTER_STRING,
or DISPLAY_STRING, and the first glyph from buffer whose
or COVER_STRING, and the first glyph from buffer whose
position is between START_CHARPOS and END_CHARPOS. */
for (; glyph < end
&& !INTEGERP (glyph->object)
&& !EQ (glyph->object, display_string)
&& !EQ (glyph->object, cover_string)
&& !(BUFFERP (glyph->object)
&& (glyph->charpos >= start_charpos
&& glyph->charpos < end_charpos));
......@@ -24359,11 +24365,11 @@ mouse_face_from_buffer_pos (Lisp_Object window,
;
 
/* Scan the glyph row, looking for BEFORE_STRING, AFTER_STRING,
or DISPLAY_STRING, and the first glyph from buffer whose
or COVER_STRING, and the first glyph from buffer whose
position is between START_CHARPOS and END_CHARPOS. */
for (; glyph > end
&& !INTEGERP (glyph->object)
&& !EQ (glyph->object, display_string)
&& !EQ (glyph->object, cover_string)
&& !(BUFFERP (glyph->object)
&& (glyph->charpos >= start_charpos
&& glyph->charpos < end_charpos));
......@@ -24424,12 +24430,12 @@ mouse_face_from_buffer_pos (Lisp_Object window,
--end;
/* Scan the rest of the glyph row from the end, looking for the
first glyph that comes from BEFORE_STRING, AFTER_STRING, or
DISPLAY_STRING, or whose position is between START_CHARPOS
COVER_STRING, or whose position is between START_CHARPOS
and END_CHARPOS */
for (--end;
end > glyph
&& !INTEGERP (end->object)
&& !EQ (end->object, display_string)
&& !EQ (end->object, cover_string)
&& !(BUFFERP (end->object)
&& (end->charpos >= start_charpos
&& end->charpos < end_charpos));
......@@ -24474,12 +24480,12 @@ mouse_face_from_buffer_pos (Lisp_Object window,
}
/* Scan the rest of the glyph row from the end, looking for the
first glyph that comes from BEFORE_STRING, AFTER_STRING, or
DISPLAY_STRING, or whose position is between START_CHARPOS
COVER_STRING, or whose position is between START_CHARPOS
and END_CHARPOS */
for ( ;
end < glyph
&& !INTEGERP (end->object)
&& !EQ (end->object, display_string)
&& !EQ (end->object, cover_string)
&& !(BUFFERP (end->object)
&& (end->charpos >= start_charpos
&& end->charpos < end_charpos));
......@@ -25285,7 +25291,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
EMACS_INT pos;
struct glyph *glyph;
Lisp_Object object;
Lisp_Object mouse_face = Qnil, overlay = Qnil, position;
Lisp_Object mouse_face = Qnil, position;
Lisp_Object *overlay_vec = NULL;
int noverlays;
struct buffer *obuf;
......@@ -25418,7 +25424,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
&& mouse_face_overlay_overlaps (hlinfo->mouse_face_overlay)))
{
/* Find the highest priority overlay with a mouse-face. */
overlay = Qnil;
Lisp_Object overlay = Qnil;
for (i = noverlays - 1; i >= 0 && NILP (overlay); --i)
{
mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face);
......@@ -25446,19 +25452,19 @@ note_mouse_highlight (struct frame *f, int x, int y)
{
/* The mouse-highlighting comes from a display string
with a mouse-face. */
Lisp_Object b, e;
Lisp_Object s, e;
EMACS_INT ignore;
 
b = Fprevious_single_property_change
s = Fprevious_single_property_change
(make_number (pos + 1), Qmouse_face, object, Qnil);
e = Fnext_single_property_change
(position, Qmouse_face, object, Qnil);
if (NILP (b))
b = make_number (0);
if (NILP (s))
s = make_number (0);
if (NILP (e))
e = make_number (SCHARS (object) - 1);
mouse_face_from_string_pos (w, hlinfo, object,
XINT (b), XINT (e));
XINT (s), XINT (e));
hlinfo->mouse_face_past_end = 0;
hlinfo->mouse_face_window = window;
hlinfo->mouse_face_face_id
......@@ -25471,7 +25477,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
{
/* The mouse-highlighting, if any, comes from an overlay
or text property in the buffer. */
Lisp_Object buffer, display_string;
Lisp_Object buffer, cover_string;
 
if (STRINGP (object))
{
......@@ -25485,13 +25491,13 @@ note_mouse_highlight (struct frame *f, int x, int y)
mouse_face = get_char_property_and_overlay
(make_number (pos), Qmouse_face, w->buffer, &overlay);
buffer = w->buffer;
display_string = object;
cover_string = object;
}
}
else
{
buffer = object;
display_string = Qnil;
cover_string = Qnil;
}
 
if (!NILP (mouse_face))
......@@ -25543,7 +25549,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
XFASTINT (before),
XFASTINT (after),
before_string, after_string,
display_string);
cover_string);
cursor = No_Cursor;
}
}
......@@ -25572,16 +25578,16 @@ note_mouse_highlight (struct frame *f, int x, int y)
}
else
{
Lisp_Object object = glyph->object;
Lisp_Object obj = glyph->object;
EMACS_INT charpos = glyph->charpos;
 
/* Try text properties. */
if (STRINGP (object)
if (STRINGP (obj)
&& charpos >= 0
&& charpos < SCHARS (object))
&& charpos < SCHARS (obj))
{
help = Fget_text_property (make_number (charpos),
Qhelp_echo, object);
Qhelp_echo, obj);
if (NILP (help))
{
/* If the string itself doesn't specify a help-echo,
......@@ -25589,30 +25595,30 @@ note_mouse_highlight (struct frame *f, int x, int y)
struct glyph_row *r
= MATRIX_ROW (w->current_matrix, vpos);
EMACS_INT start = MATRIX_ROW_START_CHARPOS (r);
EMACS_INT pos = string_buffer_position (w, object, start);
if (pos > 0)
EMACS_INT p = string_buffer_position (w, obj, start);
if (p > 0)
{
help = Fget_char_property (make_number (pos),
help = Fget_char_property (make_number (p),
Qhelp_echo, w->buffer);
if (!NILP (help))
{
charpos = pos;
object = w->buffer;
charpos = p;
obj = w->buffer;
}
}
}
}
else if (BUFFERP (object)