Mercurial > emacs
changeset 59619:4b1b522ba215
(fast_find_position): Backtrack to find first row if
charpos is inside a display overlay that spans multiple lines.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Tue, 18 Jan 2005 12:39:51 +0000 |
parents | f2e0c0de7b35 |
children | 1bf354073f0c |
files | src/xdisp.c |
diffstat | 1 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Tue Jan 18 12:39:33 2005 +0000 +++ b/src/xdisp.c Tue Jan 18 12:39:51 2005 +0000 @@ -20603,6 +20603,28 @@ past_end = 1; } + /* If whole rows or last part of a row came from a display overlay, + row_containing_pos will skip over such rows because their end pos + equals the start pos of the overlay or interval. Backtrack if we + have a STOP object and previous row's end glyph came from STOP. */ + if (!NILP (stop)) + { + struct glyph_row *prev = row-1; + while ((prev = row - 1, prev >= first) + && MATRIX_ROW_END_CHARPOS (prev) == charpos + && prev->used[TEXT_AREA] > 0) + { + end = prev->glyphs[TEXT_AREA]; + glyph = end + prev->used[TEXT_AREA]; + while (--glyph >= end + && INTEGERP (glyph->object)); + if (glyph < end + || !EQ (stop, glyph->object)) + break; + row = prev; + } + } + *x = row->x; *y = row->y; *vpos = MATRIX_ROW_VPOS (row, w->current_matrix);