summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Aguilar Mena <spacibba@aol.com>2019-10-27 02:43:11 +0100
committerJimmy Aguilar Mena <spacibba@aol.com>2019-10-27 02:43:11 +0100
commitff544e39ea3a992da71c89738c589b0f0d6f7d3b (patch)
treef6d6d26f89d3f4cb675f7d861a24a210334a0141
parent87980c226b694377120cd5f3b38cb6104405a31d (diff)
downloademacs-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.c9
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;