]> git.eshelyaron.com Git - emacs.git/commitdiff
A better fix for bug #11464 with pos-visible-in-window-p and R2L text.
authorEli Zaretskii <eliz@gnu.org>
Sat, 19 May 2012 12:14:11 +0000 (15:14 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 19 May 2012 12:14:11 +0000 (15:14 +0300)
 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
src/xdisp.c

index 2a7f8e2958f6f825feb21d8c50e80c7047c527cb..b117a1e04067e5b3dda43fdc386e9b58b26c157f 100644 (file)
@@ -1,3 +1,13 @@
+2012-05-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * 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  <eliz@gnu.org>
 
        * xdisp.c (pos_visible_p): Fix last change.  (Bug#11464)
index e8253c714e3168bb467cdce6cfbc382a9efb0688..a3227b556a939abefdd7313315f917f04138ba2e 100644 (file)
@@ -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