diff options
| author | Eli Zaretskii | 2010-08-08 19:23:11 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2010-08-08 19:23:11 +0300 |
| commit | efb41e219b4d568cef324590594e8c6f49ad6e4f (patch) | |
| tree | 712a822ed36036014c176f56a7b90b09624f28d1 /src | |
| parent | 2c695727e092f051b17846c0897fd541cefbdf8a (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/xdisp.c | 38 |
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 @@ | |||
| 1 | 2010-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 | |||
| 1 | 2010-08-07 Chong Yidong <cyd@stupidchicken.com> | 6 | 2010-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 |