emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-27 c9a7394 2/2: Fix face merging at EOL when inherited face specif


From: Eli Zaretskii
Subject: emacs-27 c9a7394 2/2: Fix face merging at EOL when inherited face specifies :extend
Date: Thu, 13 Aug 2020 09:42:47 -0400 (EDT)

branch: emacs-27
commit c9a739408d286b52782c9005dcac97304c13d273
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    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 39c90f8dfabe158ad7ac9243aa9b9dedb9409e19)
---
 src/xfaces.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/xfaces.c b/src/xfaces.c
index 12eb7de..66d6c34 100644
--- a/src/xfaces.c
+++ b/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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]