(handle_face_prop): Use face_at_buffer_position_no_overlays
authorRichard M. Stallman <rms@gnu.org>
Sat, 3 Nov 2007 03:48:12 +0000 (03:48 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 3 Nov 2007 03:48:12 +0000 (03:48 +0000)
to get the base face for an overlay string.

src/ChangeLog
src/xdisp.c

index 42ebbdd..13c5b45 100644 (file)
@@ -1,5 +1,12 @@
 2007-11-03  Richard Stallman  <rms@gnu.org>
 
+       * xdisp.c (handle_face_prop): Use face_at_buffer_position_no_overlays
+       to get the base face for an overlay string.
+
+       * dispextern.h (face_at_buffer_position_no_overlays): Add decl.
+
+       * xfaces.c (face_at_buffer_position_no_overlays): New function.
+
        * xdisp.c (handle_stop): Move some code out of loop.
 
 2007-11-01  Johan Bockg\e,Ae\e(Brd  <bojohan@gnu.org>
index ef8c6c8..4e3c044 100644 (file)
@@ -3367,16 +3367,31 @@ handle_face_prop (it)
       int base_face_id, bufpos;
 
       if (it->current.overlay_string_index >= 0)
-       bufpos = IT_CHARPOS (*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;
+       {
+         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);
+         /* 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,