changeset 78374:18f6eb588c67

(face-normalize-spec): New function. (frame-set-background-mode): Normalize face-spec before calling face-spec-match-p.
author Richard M. Stallman <rms@gnu.org>
date Tue, 31 Jul 2007 17:33:55 +0000
parents 3386631a602c
children 3a340d823f7c
files lisp/faces.el
diffstat 1 files changed, 24 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/faces.el	Tue Jul 31 15:28:16 2007 +0000
+++ b/lisp/faces.el	Tue Jul 31 17:33:55 2007 +0000
@@ -1505,6 +1505,28 @@
       (get face 'saved-face)
       (face-default-spec face)))
 
+(defsubst face-normalize-spec (spec)
+  "Return a normalized face-spec of SPEC."
+  (let (normalized-spec)
+    (while spec
+      (let ((attribute (car spec))
+	    (value (car (cdr spec))))
+	;; Support some old-style attribute names and values.
+	(case attribute
+	  (:bold (setq attribute :weight value (if value 'bold 'normal)))
+	  (:italic (setq attribute :slant value (if value 'italic 'normal)))
+	  ((:foreground :background)
+	   ;; Compatibility with 20.x.  Some bogus face specs seem to
+	   ;; exist containing things like `:foreground nil'.
+	   (if (null value) (setq value 'unspecified)))
+	  (t (unless (assq attribute face-x-resources)
+	       (setq attribute nil))))
+	(when attribute
+	  (push attribute normalized-spec)
+	  (push value normalized-spec)))
+      (setq spec (cdr (cdr spec))))
+    (nreverse normalized-spec)))
+
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Frame-type independent color support.
@@ -1647,7 +1669,8 @@
 	;; be unmodified, so we can avoid consing in the common case.
 	(dolist (face (face-list))
 	  (when (not (face-spec-match-p face
-					(face-user-default-spec face)
+					(face-normalize-spec
+					 (face-user-default-spec face))
 					(selected-frame)))
 	    (push face locally-modified-faces)))
 	;; Now change to the new frame parameters