changeset 69571:4f6b547120ec

(set_cursor_from_row): Fix cursor property on overlay string, so it doesn't associate overlay string with following glyph by default. Allow integer property value to specify explicit number of buffer positions associate with overlay string.
author Kim F. Storm <storm@cua.dk>
date Sun, 19 Mar 2006 19:38:48 +0000
parents 822a6a9bb8c9
children b4faac2800dd
files src/xdisp.c
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Sun Mar 19 18:20:31 2006 +0000
+++ b/src/xdisp.c	Sun Mar 19 19:38:48 2006 +0000
@@ -11604,7 +11604,7 @@
 	  x += glyph->pixel_width;
 	  ++glyph;
 	  if (cursor_from_overlay_pos
-	      && last_pos > cursor_from_overlay_pos)
+	      && last_pos >= cursor_from_overlay_pos)
 	    {
 	      cursor_from_overlay_pos = 0;
 	      cursor = 0;
@@ -11618,10 +11618,12 @@
 	  /* Skip all glyphs from string.  */
 	  do
 	    {
+	      Lisp_Object cprop;
 	      int pos;
 	      if ((cursor == NULL || glyph > cursor)
-		  && !NILP (Fget_char_property (make_number ((glyph)->charpos),
-						Qcursor, (glyph)->object))
+		  && (cprop = Fget_char_property (make_number ((glyph)->charpos),
+						  Qcursor, (glyph)->object),
+		      !NILP (cprop))
 		  && (pos = string_buffer_position (w, glyph->object,
 						    string_before_pos),
 		      (pos == 0	  /* From overlay */
@@ -11632,14 +11634,15 @@
 		     Add 1 to last_pos so that if point corresponds to the
 		     glyph right after the overlay, we still use a 'cursor'
 		     property found in that overlay.  */
-		  cursor_from_overlay_pos = pos == 0 ? last_pos+1 : 0;
+		  cursor_from_overlay_pos = (pos ? 0 : last_pos
+					     + (INTEGERP (cprop) ? XINT (cprop) : 0));
 		  cursor = glyph;
 		  cursor_x = x;
 		}
 	      x += glyph->pixel_width;
 	      ++glyph;
 	    }
-	  while (glyph < end && STRINGP (glyph->object));
+	  while (glyph < end && EQ (glyph->object, string_start->object));
 	}
     }