Mercurial > emacs
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