summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c25
-rw-r--r--src/xfaces.c4
2 files changed, 9 insertions, 20 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index bb370bbb78f..4ddde1be717 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4243,26 +4243,11 @@ face_at_pos (const struct it *it, enum lface_attribute_index attr_filter)
the display string do. This sounds like a design bug,
but Emacs always did that since v21.1, so changing that
might be a big deal. */
- bool use_default = (it->string_from_prefix_prop_p != 0);
- base_face_id = DEFAULT_FACE_ID;
- if (!use_default)
- {
- base_face_id = underlying_face_id (it);
- /* Reject the underlying face, if that face is different
- from the iterator face, and we filter by attr_filter,
- and that face's value of the filter attribute is nil
- or unspecified; use the default face instead. */
- struct face *bf = FACE_FROM_ID_OR_NULL (it->f, base_face_id);
- if (base_face_id != it->base_face_id
- && attr_filter > 0
- && (NILP (bf->lface[attr_filter])
- || EQ (bf->lface[attr_filter], Qunspecified)))
- use_default = true;
- }
- if (use_default)
- base_face_id = (!NILP (Vface_remapping_alist)
- ? lookup_basic_face (it->w, it->f, DEFAULT_FACE_ID)
- : DEFAULT_FACE_ID);
+ base_face_id = it->string_from_display_prop_p
+ ? (!NILP (Vface_remapping_alist)
+ ? lookup_basic_face (it->w, it->f, DEFAULT_FACE_ID)
+ : DEFAULT_FACE_ID)
+ : underlying_face_id (it);
}
return face_at_string_position (it->w,
diff --git a/src/xfaces.c b/src/xfaces.c
index 54b5f4a94a4..5c347d41e30 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -6445,6 +6445,10 @@ face_at_string_position (struct window *w, Lisp_Object string,
/* Begin with attributes from the base face. */
memcpy (attrs, base_face->lface, sizeof attrs);
+ /* Reset the attribute of the base face used as the filter, because
+ otherwise there's no way for faces to be merged to countermand that. */
+ if (EQ (attrs[attr_filter], Qt))
+ attrs[attr_filter] = Qnil;
/* Merge in attributes specified via text properties. */
if (!NILP (prop))