summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xfaces.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/xfaces.c b/src/xfaces.c
index 440cf4f1917..6db4dcd226f 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -2163,11 +2163,31 @@ face_inherited_attr (struct window *w, struct frame *f,
&& !UNSPECIFIEDP (inherited_attrs[LFACE_INHERIT_INDEX]))
{
Lisp_Object parent_face = inherited_attrs[LFACE_INHERIT_INDEX];
- bool ok = get_lface_attributes (w, f, parent_face, inherited_attrs,
- false, named_merge_points);
- if (!ok)
- break;
- attr_val = inherited_attrs[attr_idx];
+ bool ok;
+
+ if (CONSP (parent_face))
+ {
+ Lisp_Object tail;
+ for (tail = parent_face; !NILP (tail); tail = XCDR (tail))
+ {
+ ok = get_lface_attributes (w, f, XCAR (tail), inherited_attrs,
+ false, named_merge_points);
+ if (!ok)
+ break;
+ attr_val = face_inherited_attr (w, f, inherited_attrs, attr_idx,
+ named_merge_points);
+ if (!UNSPECIFIEDP (attr_val))
+ break;
+ }
+ }
+ else
+ {
+ ok = get_lface_attributes (w, f, parent_face, inherited_attrs,
+ false, named_merge_points);
+ if (!ok)
+ break;
+ attr_val = inherited_attrs[attr_idx];
+ }
}
return attr_val;
}