Fix face merging at EOL when inherited face specifies :extend
* src/xfaces.c (merge_face_ref): Handle correctly faces that
inherit from another, and in addition specify :extend.
(Bug#42552)
(cherry picked from commit 39c90f8dfa
)
This commit is contained in:
parent
f946e48bf5
commit
c9a739408d
1 changed files with 17 additions and 3 deletions
20
src/xfaces.c
20
src/xfaces.c
|
@ -2394,6 +2394,7 @@ merge_face_ref (struct window *w,
|
|||
{
|
||||
bool ok = true; /* Succeed without an error? */
|
||||
Lisp_Object filtered_face_ref;
|
||||
bool attr_filter_passed = false;
|
||||
|
||||
filtered_face_ref = face_ref;
|
||||
do
|
||||
|
@ -2490,6 +2491,7 @@ merge_face_ref (struct window *w,
|
|||
|| UNSPECIFIEDP (scratch_attrs[attr_filter]))
|
||||
return true;
|
||||
}
|
||||
attr_filter_passed = true;
|
||||
}
|
||||
while (CONSP (face_ref) && CONSP (XCDR (face_ref)))
|
||||
{
|
||||
|
@ -2653,9 +2655,21 @@ merge_face_ref (struct window *w,
|
|||
{
|
||||
/* 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))
|
||||
|
|
Loading…
Add table
Reference in a new issue