aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2010-08-08 19:23:11 +0300
committerEli Zaretskii2010-08-08 19:23:11 +0300
commitefb41e219b4d568cef324590594e8c6f49ad6e4f (patch)
tree712a822ed36036014c176f56a7b90b09624f28d1 /src
parent2c695727e092f051b17846c0897fd541cefbdf8a (diff)
downloademacs-efb41e219b4d568cef324590594e8c6f49ad6e4f.tar.gz
emacs-efb41e219b4d568cef324590594e8c6f49ad6e4f.zip
Fix overlay arrow display (bug #6699).
xdisp.c (display_line): Move the handling of overlay arrow after the call to find_row_edges.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c38
2 files changed, 27 insertions, 16 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8ed347761c1..c3dfd6859c0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12010-08-08 Eli Zaretskii <eliz@gnu.org>
2
3 * xdisp.c (display_line): Move the handling of overlay arrow after
4 the call to find_row_edges. (Bug#6699)
5
12010-08-07 Chong Yidong <cyd@stupidchicken.com> 62010-08-07 Chong Yidong <cyd@stupidchicken.com>
2 7
3 * keyboard.c (command_loop_1): 8 * keyboard.c (command_loop_1):
diff --git a/src/xdisp.c b/src/xdisp.c
index 2a9c9949be9..9ee1f874bb6 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -11352,6 +11352,8 @@ overlay_arrow_at_row (struct it *it, struct glyph_row *row)
11352 && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val))) 11352 && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val)))
11353 { 11353 {
11354 if (FRAME_WINDOW_P (it->f) 11354 if (FRAME_WINDOW_P (it->f)
11355 /* FIXME: if ROW->reversed_p is set, this should test
11356 the right fringe, not the left one. */
11355 && WINDOW_LEFT_FRINGE_WIDTH (it->w) > 0) 11357 && WINDOW_LEFT_FRINGE_WIDTH (it->w) > 0)
11356 { 11358 {
11357#ifdef HAVE_WINDOW_SYSTEM 11359#ifdef HAVE_WINDOW_SYSTEM
@@ -17798,6 +17800,26 @@ display_line (struct it *it)
17798 row->truncated_on_left_p = 1; 17800 row->truncated_on_left_p = 1;
17799 } 17801 }
17800 17802
17803 /* Remember the position at which this line ends.
17804
17805 BIDI Note: any code that needs MATRIX_ROW_START/END_CHARPOS
17806 cannot be before the call to find_row_edges below, since that is
17807 where these positions are determined. */
17808 row->end = it->current;
17809 if (!it->bidi_p)
17810 {
17811 row->minpos = row->start.pos;
17812 row->maxpos = row->end.pos;
17813 }
17814 else
17815 {
17816 /* ROW->minpos and ROW->maxpos must be the smallest and
17817 `1 + the largest' buffer positions in ROW. But if ROW was
17818 bidi-reordered, these two positions can be anywhere in the
17819 row, so we must determine them now. */
17820 find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos);
17821 }
17822
17801 /* If the start of this line is the overlay arrow-position, then 17823 /* If the start of this line is the overlay arrow-position, then
17802 mark this glyph row as the one containing the overlay arrow. 17824 mark this glyph row as the one containing the overlay arrow.
17803 This is clearly a mess with variable size fonts. It would be 17825 This is clearly a mess with variable size fonts. It would be
@@ -17843,22 +17865,6 @@ display_line (struct it *it)
17843 /* Compute pixel dimensions of this line. */ 17865 /* Compute pixel dimensions of this line. */
17844 compute_line_metrics (it); 17866 compute_line_metrics (it);
17845 17867
17846 /* Remember the position at which this line ends. */
17847 row->end = it->current;
17848 if (!it->bidi_p)
17849 {
17850 row->minpos = row->start.pos;
17851 row->maxpos = row->end.pos;
17852 }
17853 else
17854 {
17855 /* ROW->minpos and ROW->maxpos must be the smallest and
17856 `1 + the largest' buffer positions in ROW. But if ROW was
17857 bidi-reordered, these two positions can be anywhere in the
17858 row, so we must determine them now. */
17859 find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos);
17860 }
17861
17862 /* Record whether this row ends inside an ellipsis. */ 17868 /* Record whether this row ends inside an ellipsis. */
17863 row->ends_in_ellipsis_p 17869 row->ends_in_ellipsis_p
17864 = (it->method == GET_FROM_DISPLAY_VECTOR 17870 = (it->method == GET_FROM_DISPLAY_VECTOR