diff options
author | Jimmy Aguilar Mena <spacibba@aol.com> | 2019-10-27 02:43:11 +0100 |
---|---|---|
committer | Jimmy Aguilar Mena <spacibba@aol.com> | 2019-10-27 02:43:11 +0100 |
commit | ff544e39ea3a992da71c89738c589b0f0d6f7d3b (patch) | |
tree | f6d6d26f89d3f4cb675f7d861a24a210334a0141 | |
parent | 87980c226b694377120cd5f3b38cb6104405a31d (diff) | |
download | emacs-fix/inherit_extend_face.tar.gz |
Optimize conditional recursive merge face.fix/inherit_extend_face
* src/xfaces.c (merge_face_vectors) : Pass ATTR_FILTER to
merge_face_ref to stop recursion merging in advance when possible.
(merge_named_face) : add more conditions to potentially reduce calls to
merge_face_vectors in more unneeded situations.
-rw-r--r-- | src/xfaces.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/xfaces.c b/src/xfaces.c index e4d19440bc9..3806fa90e23 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -2085,7 +2085,7 @@ merge_face_vectors (struct window *w, struct frame *f, memcpy (tmp, to, LFACE_VECTOR_SIZE * sizeof *tmp); merge_face_ref (w, f, from[LFACE_INHERIT_INDEX], - tmp, false, named_merge_points, 0); + tmp, false, named_merge_points, attr_filter); if (NILP (tmp[attr_filter]) || UNSPECIFIEDP (tmp[attr_filter])) @@ -2172,7 +2172,12 @@ merge_named_face (struct window *w, bool ok = get_lface_attributes (w, f, face_name, from, false, named_merge_points); - if (ok && (attr_filter == 0 || !NILP(from[attr_filter]))) + if (ok && (attr_filter == 0 /* No filter. */ + || (!NILP(from[attr_filter]) /* Filter, but specified. */ + && !UNSPECIFIEDP(from[attr_filter])) + || (!NILP(from[attr_filter]) /* Filter, unspecified, but inherited. */ + && UNSPECIFIEDP(from[attr_filter]) + && !NILP (from[LFACE_INHERIT_INDEX])))) merge_face_vectors (w, f, from, to, named_merge_points, attr_filter); return ok; |