diff options
author | Eli Zaretskii <[email protected]> | 2010-04-01 15:37:28 +0300 |
---|---|---|
committer | Eli Zaretskii <[email protected]> | 2010-04-01 15:37:28 +0300 |
commit | 814062c76646a9dd4504ae578d7fb41891a5cab4 (patch) | |
tree | 5ddbe64530dfeb9dd7f8a460a606660f2559409b /src | |
parent | 357e2d8ec0360a96f48a263487d92754b4144ed3 (diff) |
Fix bug #5816.
xdisp.c (set_cursor_from_row): Fix cursor positioning when the
string with `cursor' property comes from an `after-string' overlay.
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 6 | ||||
-rw-r--r-- | src/xdisp.c | 19 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index a2abfab372..df0453a341 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2010-04-01 Eli Zaretskii <[email protected]> + + * xdisp.c (set_cursor_from_row): Fix cursor positioning when the + string with `cursor' property comes from an `after-string' + overlay. (Bug#5816) + 2010-04-01 Glenn Morris <[email protected]> * Makefile.in (LIBTIFF, LIBJPEG, LIBPNG, LIBGIF, LIBXPM, XFT_LIBS): diff --git a/src/xdisp.c b/src/xdisp.c index 709ff5f6d6..c6ae6ad4c1 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12823,12 +12823,19 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos) str = glyph->object; tem = string_buffer_position_lim (w, str, pos, pos_after, 0); - if (pos <= tem) + if (tem == 0 /* from overlay */ + || pos <= tem) { /* If the string from which this glyph came is found in the buffer at point, then we've - found the glyph we've been looking for. */ - if (tem == pt_old) + found the glyph we've been looking for. If + it comes from an overlay (tem == 0), and it + has the `cursor' property on one of its + glyphs, record that glyph as a candidate for + displaying the cursor. (As in the + unidirectional version, we will display the + cursor on the last candidate we find.) */ + if (tem == 0 || tem == pt_old) { /* The glyphs from this string could have been reordered. Find the one with the @@ -12861,9 +12868,11 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos) } } - goto compute_x; + if (tem == pt_old) + goto compute_x; } - pos = tem + 1; /* don't find previous instances */ + if (tem) + pos = tem + 1; /* don't find previous instances */ } /* This string is not what we want; skip all of the glyphs that came from it. */ |