]> code.delx.au - gnu-emacs/commitdiff
(note_mode_line_or_margin_highlight): Don't decrement glyph pointer
authorChong Yidong <cyd@stupidchicken.com>
Tue, 10 Apr 2007 15:57:25 +0000 (15:57 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Tue, 10 Apr 2007 15:57:25 +0000 (15:57 +0000)
before start of glyph row.

src/xdisp.c

index fd65856c8e5cba085abcbbc304add8b5b0cf83b6..90977aa3d7d3b2022698704a4f79869099c5bc82 100644 (file)
@@ -22437,7 +22437,7 @@ note_mode_line_or_margin_highlight (window, x, y, area)
 
   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 @@ note_mode_line_or_margin_highlight (window, x, y, area)
       /* 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 @@ note_mode_line_or_margin_highlight (window, x, y, area)
             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++)
+         gpos = 0;
+         if (glyph > row_start_glyph)
            {
-             if (!EQ (tmp_glyph->object, glyph->object))
-               break;
+             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