aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <[email protected]>2010-04-01 15:37:28 +0300
committerEli Zaretskii <[email protected]>2010-04-01 15:37:28 +0300
commit814062c76646a9dd4504ae578d7fb41891a5cab4 (patch)
tree5ddbe64530dfeb9dd7f8a460a606660f2559409b /src
parent357e2d8ec0360a96f48a263487d92754b4144ed3 (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/ChangeLog6
-rw-r--r--src/xdisp.c19
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. */