summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2011-09-17 11:09:45 +0300
committerEli Zaretskii <eliz@gnu.org>2011-09-17 11:09:45 +0300
commitbb187662be4ccd53e168fb07501931da596de39a (patch)
tree55153805ac8727c722b30d7c640ae7ba702e9e28
parent540e44dbc817db4eb7cbe7f32162a11fa3547281 (diff)
Fix bug #9524 with cursor positioning on display strings in truncated lines.
src/xdisp.c (set_cursor_from_row): Don't invoke special treatment of truncated lines if point is covered by a display string.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c18
2 files changed, 15 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 27b7e709317..c6238701301 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-17 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (set_cursor_from_row): Don't invoke special treatment of
+ truncated lines if point is covered by a display string. (Bug#9524)
+
2011-09-16 Paul Eggert <eggert@cs.ucla.edu>
* xselect.c: Relax test for outgoing X longs (Bug#9498).
diff --git a/src/xdisp.c b/src/xdisp.c
index 6ba92f3ed79..864734d4b20 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -13637,15 +13637,17 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
/* A truncated row may not include PT among its
character positions. Setting the cursor inside the
scroll margin will trigger recalculation of hscroll
- in hscroll_window_tree. */
- || (row->truncated_on_left_p && pt_old < bpos_min)
- || (row->truncated_on_right_p && pt_old > bpos_max)
- /* Zero-width characters produce no glyphs. */
+ in hscroll_window_tree. But if a display string
+ covers point, defer to the string-handling code
+ below to figure this out. */
|| (!string_seen
- && !empty_line_p
- && (row->reversed_p
- ? glyph_after > glyphs_end
- : glyph_after < glyphs_end)))
+ && ((row->truncated_on_left_p && pt_old < bpos_min)
+ || (row->truncated_on_right_p && pt_old > bpos_max)
+ /* Zero-width characters produce no glyphs. */
+ || (!empty_line_p
+ && (row->reversed_p
+ ? glyph_after > glyphs_end
+ : glyph_after < glyphs_end)))))
{
cursor = glyph_after;
x = -1;