changeset 77110:95b9424785f7

(note_mode_line_or_margin_highlight): Don't decrement glyph pointer before start of glyph row.
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 10 Apr 2007 15:57:25 +0000
parents 6d0e829fb0ea
children 5104ed9b911f
files src/xdisp.c
diffstat 1 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Tue Apr 10 15:57:01 2007 +0000
+++ b/src/xdisp.c	Tue Apr 10 15:57:25 2007 +0000
@@ -22437,7 +22437,7 @@
 
   Lisp_Object mouse_face;
   int original_x_pixel = x;
-  struct glyph * glyph = NULL;
+  struct glyph * glyph = NULL, * row_start_glyph = NULL;
   struct glyph_row *row;
 
   if (area == ON_MODE_LINE || area == ON_HEADER_LINE)
@@ -22455,7 +22455,7 @@
       /* Find glyph */
       if (row->mode_line_p && row->enabled_p)
 	{
-	  glyph = row->glyphs[TEXT_AREA];
+	  glyph = row_start_glyph = row->glyphs[TEXT_AREA];
 	  end = glyph + row->used[TEXT_AREA];
 
 	  for (x0 = original_x_pixel;
@@ -22579,12 +22579,17 @@
 	     is converted to a flatten by emacs lisp interpreter.
 	     The internal string is an element of the structures.
 	     The displayed string is the flatten string. */
-	  for (tmp_glyph = glyph - 1, gpos = 0;
-	       tmp_glyph->charpos >= XINT (b);
-	       tmp_glyph--, gpos++)
-	    {
-	      if (!EQ (tmp_glyph->object, glyph->object))
-		break;
+	  gpos = 0;
+	  if (glyph > row_start_glyph)
+	    {
+	      tmp_glyph = glyph - 1;
+	      while (tmp_glyph >= row_start_glyph
+		     && tmp_glyph->charpos >= XINT (b)
+		     && EQ (tmp_glyph->object, glyph->object))
+		{
+		  tmp_glyph--;
+		  gpos++;
+		}
 	    }
 
 	  /* Calculate the lenght(glyph sequence length: GSEQ_LENGTH) of