changeset 111638:b823e94ac814

Fix bug #6687 with cursor positioning after before-string from overlays. xdisp.c (set_cursor_from_row): Display cursor after all the glyphs that come from an overlay. Don't overstep the last glyph when skipping glyphs from an overlay.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 19 Nov 2010 18:34:22 +0200
parents 63bab16df70b
children d94e03b64838
files src/ChangeLog src/xdisp.c
diffstat 2 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Nov 19 14:25:17 2010 +0100
+++ b/src/ChangeLog	Fri Nov 19 18:34:22 2010 +0200
@@ -1,3 +1,9 @@
+2010-11-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* xdisp.c (set_cursor_from_row): Display cursor after all the
+	glyphs that come from an overlay.  Don't overstep the last glyph
+	when skipping glyphs from an overlay.  (Bug#6687)
+
 2010-11-18  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* alloc.c (refill_memory_reserve): Move declaration ...
--- a/src/xdisp.c	Fri Nov 19 14:25:17 2010 +0100
+++ b/src/xdisp.c	Fri Nov 19 18:34:22 2010 +0200
@@ -12941,7 +12941,8 @@
 			     cursor on that character's glyph.  */
 			  EMACS_INT strpos = glyph->charpos;
 
-			  cursor = glyph;
+			  if (tem)
+			    cursor = glyph;
 			  for (glyph += incr;
 			       (row->reversed_p ? glyph > stop : glyph < stop)
 				 && EQ (glyph->object, str);
@@ -12958,7 +12959,7 @@
 				  cursor = glyph;
 				  break;
 				}
-			      if (glyph->charpos < strpos)
+			      if (tem && glyph->charpos < strpos)
 				{
 				  strpos = glyph->charpos;
 				  cursor = glyph;
@@ -12973,10 +12974,9 @@
 		    }
 		  /* This string is not what we want; skip all of the
 		     glyphs that came from it.  */
-		  do
+		  while ((row->reversed_p ? glyph > stop : glyph < stop)
+			 && EQ (glyph->object, str))
 		    glyph += incr;
-		  while ((row->reversed_p ? glyph > stop : glyph < stop)
-			 && EQ (glyph->object, str));
 		}
 	      else
 		glyph += incr;