]> git.eshelyaron.com Git - emacs.git/commitdiff
Retrospective commit from 2009-11-21.
authorEli Zaretskii <eliz@gnu.org>
Fri, 1 Jan 2010 12:01:23 +0000 (07:01 -0500)
committerEli Zaretskii <eliz@gnu.org>
Fri, 1 Jan 2010 12:01:23 +0000 (07:01 -0500)
Fix cursor positioning on empty lines with overlays.

 xdisp.c (set_cursor_from_row): Fix cursor positioning on empty
 lines when integer values of `cursor' property is used on display
 strings.

src/ChangeLog.bidi
src/xdisp.c

index 2f800e5ecd223634e9cde7a2b0532063cd0fc92e..e3e1eddab75be597c05b068eff79dc2fd64eba2c 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): Fix cursor positioning on empty
+       lines when integer values of `cursor' property is used on display
+       strings.
+
 2009-11-14  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (init_iterator, text_outside_line_unchanged_p)
index 180031be055d0eeeeda2ccecc2d157a2610fb177..2d5314c7f830b29ee9da383a7a921b037dad2196 100644 (file)
@@ -12468,8 +12468,8 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos)
   /* Non-zero means we've seen at least one glyph that came from a
      display string.  */
   int string_seen = 0;
-  /* Largest buffer position seen during scan of glyph row.  */
-  EMACS_INT bpos_max = 0;
+  /* Largest buffer position seen so far during scan of glyph row.  */
+  EMACS_INT bpos_max = last_pos;
   /* Last buffer position covered by an overlay string with an integer
      `cursor' property.  */
   EMACS_INT bpos_covered = 0;
@@ -12596,7 +12596,10 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos)
                /* If the `cursor' property covers buffer positions up
                   to and including point, we should display cursor on
                   this glyph.  */
-               if (bpos_covered >= pt_old)
+               /* Implementation note: bpos_max == pt_old when, e.g.,
+                  we are in an empty line, where bpos_max is set to
+                  MATRIX_ROW_START_CHARPOS, see above.  */
+               if (bpos_max <= pt_old && bpos_covered >= pt_old)
                  {
                    cursor = glyph;
                    break;
@@ -12651,7 +12654,7 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos)
                /* If the `cursor' property covers buffer positions up
                   to and including point, we should display cursor on
                   this glyph.  */
-               if (bpos_covered >= pt_old)
+               if (bpos_max <= pt_old && bpos_covered >= pt_old)
                  {
                    cursor = glyph;
                    break;