Mercurial > emacs
diff src/xdisp.c @ 79329:6afb61db1b95
(handle_face_prop): Use face_at_buffer_position_no_overlays
to get the base face for an overlay string.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 03 Nov 2007 03:47:42 +0000 |
parents | 973c113d9bfe |
children | c81a71ff50d9 |
line wrap: on
line diff
--- a/src/xdisp.c Sat Nov 03 03:46:57 2007 +0000 +++ b/src/xdisp.c Sat Nov 03 03:47:42 2007 +0000 @@ -3367,16 +3367,31 @@ int base_face_id, bufpos; if (it->current.overlay_string_index >= 0) - bufpos = IT_CHARPOS (*it); - else - bufpos = 0; - - /* For strings from a buffer, i.e. overlay strings or strings - from a `display' property, use the face at IT's current - buffer position as the base face to merge with, so that - overlay strings appear in the same face as surrounding - text, unless they specify their own faces. */ - base_face_id = underlying_face_id (it); + { + bufpos = IT_CHARPOS (*it); + /* For an overlay face, the base face depends + only on text properties and ignores overlays. */ + base_face_id + = face_at_buffer_position_no_overlays (it->w, + IT_CHARPOS (*it), + it->region_beg_charpos, + it->region_end_charpos, + &next_stop, + (IT_CHARPOS (*it) + + TEXT_PROP_DISTANCE_LIMIT), + 0); + } + else + { + bufpos = 0; + + /* For strings from a `display' property, use the face at + IT's current buffer position as the base face to merge + with, so that overlay strings appear in the same face as + surrounding text, unless they specify their own + faces. */ + base_face_id = underlying_face_id (it); + } new_face_id = face_at_string_position (it->w, it->string,