Mercurial > emacs
changeset 98279:16fcbc5c4c7d
(get_next_display_element): Handle string display correctly when
checking for the end of a box run.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 20 Sep 2008 21:44:34 +0000 |
parents | 6cc568b9215c |
children | 7e4e0f0026f6 |
files | src/xdisp.c |
diffstat | 1 files changed, 45 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Sat Sep 20 21:43:47 2008 +0000 +++ b/src/xdisp.c Sat Sep 20 21:44:34 2008 +0000 @@ -5940,14 +5940,51 @@ if (it->face_box_p && it->s == NULL) { - int face_id; - struct face *face; - - it->end_of_box_run_p - = ((face_id = face_after_it_pos (it), - face_id != it->face_id) - && (face = FACE_FROM_ID (it->f, face_id), - face->box == FACE_NO_BOX)); + if (it->method == GET_FROM_STRING && it->sp) + { + int face_id = underlying_face_id (it); + struct face *face = FACE_FROM_ID (it->f, face_id); + + if (face) + { + if (face->box == FACE_NO_BOX) + { + /* If the box comes from face properties in a + display string, check faces in that string. */ + int string_face_id = face_after_it_pos (it); + it->end_of_box_run_p + = (FACE_FROM_ID (it->f, string_face_id)->box + == FACE_NO_BOX); + } + /* Otherwise, the box comes from the underlying face. + If this is the last string character displayed, check + the next buffer location. */ + else if ((IT_STRING_CHARPOS (*it) >= SCHARS (it->string) - 1) + && (it->current.overlay_string_index + == it->n_overlay_strings - 1)) + { + EMACS_INT ignore; + int next_face_id; + struct text_pos pos = it->current.pos; + INC_TEXT_POS (pos, it->multibyte_p); + + next_face_id = face_at_buffer_position + (it->w, CHARPOS (pos), it->region_beg_charpos, + it->region_end_charpos, &ignore, + (IT_CHARPOS (*it) + TEXT_PROP_DISTANCE_LIMIT), 0); + it->end_of_box_run_p + = (FACE_FROM_ID (it->f, next_face_id)->box + == FACE_NO_BOX); + } + } + } + else + { + int face_id = face_after_it_pos (it); + it->end_of_box_run_p + = (face_id != it->face_id + && FACE_FROM_ID (it->f, face_id)->box == FACE_NO_BOX); + } } /* Value is 0 if end of buffer or string reached. */