# HG changeset patch # User Chong Yidong # Date 1176220645 0 # Node ID 95b9424785f7d3b4a13b1887ddd405210c6c8038 # Parent 6d0e829fb0ead586da9dbafbdbe9e43bd640066e (note_mode_line_or_margin_highlight): Don't decrement glyph pointer before start of glyph row. diff -r 6d0e829fb0ea -r 95b9424785f7 src/xdisp.c --- 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