diff src/xdisp.c @ 90375:e6bf73e43cf4

Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-49 Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 164-184) - Update from CVS - Merge from gnus--rel--5.10 - Update from CVS: man/mh-e.texi (Folders): Various edits. - Update from erc--emacs--0 * gnus--rel--5.10 (patch 62-70) - Merge from emacs--devo--0 - Update from CVS
author Miles Bader <miles@gnu.org>
date Tue, 28 Mar 2006 23:08:20 +0000
parents e3bacb89536a 51f98bc8ce67
children 1ad066d533a9
line wrap: on
line diff
--- a/src/xdisp.c	Tue Mar 28 11:24:02 2006 +0000
+++ b/src/xdisp.c	Tue Mar 28 23:08:20 2006 +0000
@@ -11699,7 +11699,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;
@@ -11713,10 +11713,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 */
@@ -11727,14 +11729,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));
 	}
     }