From 44e27368281d4078a83c55003454d76683ddaad4 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 19 May 2012 15:14:11 +0300 Subject: [PATCH] A better fix for bug #11464 with pos-visible-in-window-p and R2L text. src/xdisp.c (move_it_to): Under MOVE_TO_Y, when restoring iterator state after an additional call to move_it_in_display_line_to, keep the values of it->max_ascent and it->max_descent found for the entire line. (pos_visible_p): Revert the comparison against bottom_y to what it was in 2012-05-13T18:22:35Z!eliz@gnu.org. --- src/ChangeLog | 10 ++++++++++ src/xdisp.c | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2a7f8e2958..b117a1e040 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2012-05-19 Eli Zaretskii + + * xdisp.c (move_it_to): Under MOVE_TO_Y, when restoring iterator + state after an additional call to move_it_in_display_line_to, keep + the values of it->max_ascent and it->max_descent found for the + entire line. + (pos_visible_p): Revert the comparison against bottom_y to what it + was in revid eliz@gnu.org-20120513182235-4p6386j761ld0nwb. + (Bug#11464) + 2012-05-15 Eli Zaretskii * xdisp.c (pos_visible_p): Fix last change. (Bug#11464) diff --git a/src/xdisp.c b/src/xdisp.c index e8253c714e..a3227b556a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1313,7 +1313,7 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, visible_p = bottom_y > window_top_y; else if (top_y < it.last_visible_y) visible_p = 1; - if (bottom_y <= it.last_visible_y + if (bottom_y >= it.last_visible_y && it.bidi_p && it.bidi_it.scan_dir == -1 && IT_CHARPOS (it) < charpos) { @@ -8689,8 +8689,18 @@ move_it_to (struct it *it, EMACS_INT to_charpos, int to_x, int to_y, int to_vpos { /* If TO_Y is in this line and TO_X was reached above, we scanned too far. We have to restore - IT's settings to the ones before skipping. */ + IT's settings to the ones before skipping. But + keep the more accurate values of max_ascent and + max_descent we've found while skipping the rest + of the line, for the sake of callers, such as + pos_visible_p, that need to know the line + height. */ + int max_ascent = it->max_ascent; + int max_descent = it->max_descent; + RESTORE_IT (it, &it_backup, backup_data); + it->max_ascent = max_ascent; + it->max_descent = max_descent; reached = 6; } else -- 2.20.1