# HG changeset patch # User Eli Zaretskii # Date 1281284591 -10800 # Node ID 232cf28815731bcbaf1a2ad392859ef271fa24c8 # Parent bc0b9af387a70f611f1c323a09b22c9c11d7a31a Fix overlay arrow display (bug #6699). xdisp.c (display_line): Move the handling of overlay arrow after the call to find_row_edges. diff -r bc0b9af387a7 -r 232cf2881573 src/ChangeLog --- a/src/ChangeLog Sat Aug 07 22:04:57 2010 -0500 +++ b/src/ChangeLog Sun Aug 08 19:23:11 2010 +0300 @@ -1,3 +1,8 @@ +2010-08-08 Eli Zaretskii + + * xdisp.c (display_line): Move the handling of overlay arrow after + the call to find_row_edges. (Bug#6699) + 2010-08-07 Chong Yidong * keyboard.c (command_loop_1): diff -r bc0b9af387a7 -r 232cf2881573 src/xdisp.c --- a/src/xdisp.c Sat Aug 07 22:04:57 2010 -0500 +++ b/src/xdisp.c Sun Aug 08 19:23:11 2010 +0300 @@ -11352,6 +11352,8 @@ && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val))) { if (FRAME_WINDOW_P (it->f) + /* FIXME: if ROW->reversed_p is set, this should test + the right fringe, not the left one. */ && WINDOW_LEFT_FRINGE_WIDTH (it->w) > 0) { #ifdef HAVE_WINDOW_SYSTEM @@ -17798,6 +17800,26 @@ row->truncated_on_left_p = 1; } + /* Remember the position at which this line ends. + + BIDI Note: any code that needs MATRIX_ROW_START/END_CHARPOS + cannot be before the call to find_row_edges below, since that is + where these positions are determined. */ + row->end = it->current; + if (!it->bidi_p) + { + row->minpos = row->start.pos; + row->maxpos = row->end.pos; + } + else + { + /* ROW->minpos and ROW->maxpos must be the smallest and + `1 + the largest' buffer positions in ROW. But if ROW was + bidi-reordered, these two positions can be anywhere in the + row, so we must determine them now. */ + find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos); + } + /* If the start of this line is the overlay arrow-position, then mark this glyph row as the one containing the overlay arrow. This is clearly a mess with variable size fonts. It would be @@ -17843,22 +17865,6 @@ /* Compute pixel dimensions of this line. */ compute_line_metrics (it); - /* Remember the position at which this line ends. */ - row->end = it->current; - if (!it->bidi_p) - { - row->minpos = row->start.pos; - row->maxpos = row->end.pos; - } - else - { - /* ROW->minpos and ROW->maxpos must be the smallest and - `1 + the largest' buffer positions in ROW. But if ROW was - bidi-reordered, these two positions can be anywhere in the - row, so we must determine them now. */ - find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos); - } - /* Record whether this row ends inside an ellipsis. */ row->ends_in_ellipsis_p = (it->method == GET_FROM_DISPLAY_VECTOR