{
bool ok = true; /* Succeed without an error? */
Lisp_Object filtered_face_ref;
+ bool attr_filter_passed = false;
filtered_face_ref = face_ref;
do
|| UNSPECIFIEDP (scratch_attrs[attr_filter]))
return true;
}
+ attr_filter_passed = true;
}
while (CONSP (face_ref) && CONSP (XCDR (face_ref)))
{
{
/* This is not really very useful; it's just like a
normal face reference. */
- if (! merge_face_ref (w, f, value, to,
- err_msgs, named_merge_points,
- attr_filter))
+ if (attr_filter_passed)
+ {
+ /* We already know that this face was tested
+ against attr_filter and was found applicable,
+ so don't pass attr_filter to merge_face_ref.
+ This is for when a face is specified like
+ (:inherit FACE :extend t), but the parent
+ FACE itself doesn't specify :extend. */
+ if (! merge_face_ref (w, f, value, to,
+ err_msgs, named_merge_points, 0))
+ err = true;
+ }
+ else if (! merge_face_ref (w, f, value, to,
+ err_msgs, named_merge_points,
+ attr_filter))
err = true;
}
else if (EQ (keyword, QCextend))