]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug 16694 with applying X resources to faces too early.
authorMatthias Dahl <matthias.dahl@binary-island.eu>
Mon, 28 Apr 2014 19:14:17 +0000 (22:14 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 28 Apr 2014 19:14:17 +0000 (22:14 +0300)
 lisp/faces.el (face-spec-recalc): Apply X resources only after the
 defface spec has been applied. Thus, X resources are no longer
 overriden by the defface spec which also fixes issues on win32 where
 the toolbar coloring was wrong because it is set through X resources
 and was (wrongfully) overriden.

lisp/ChangeLog
lisp/faces.el

index e27d7b1c6a0dd8e6bf6a84a22468da41e136c9e6..26516fd2cd367164dac120f064a778392dde54aa 100644 (file)
@@ -1,3 +1,11 @@
+2014-04-27  Matthias Dahl  <matthias.dahl@binary-island.eu>
+
+       * faces.el (face-spec-recalc): Apply X resources only after the
+       the defface spec has been applied. Thus, X resources are no longer
+       overriden by the defface spec which also fixes issues on win32 where
+       the toolbar coloring was wrong because it is set through X resources
+       and was (wrongfully) overriden.  (Bug#16694)
+
 2014-04-28  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * textmodes/rst.el (electric-pair-pairs): Declare.
index 88b87486f7c77c782b4938dcb2e5c0d5e685edbe..df31e0dfbd845e3bf577538c05e385a7023d75bf 100644 (file)
@@ -1641,18 +1641,22 @@ function for its other effects."
 
 (defun face-spec-recalc (face frame)
   "Reset the face attributes of FACE on FRAME according to its specs.
-After the reset, the specs are applied from the following sources in this order:
-  X resources (if applicable)
+The following sources are applied in this order:
+
+  face reset to default values if it's the default face, otherwise set
+  to unspecifed (through `face-spec-reset-face`)
    |
   (theme and user customization)
-    or, if nonexistent or does not match the current frame,
+    or: if none of the above exist, do not match the current frame or
+        did inherit from the defface spec instead of overwriting it
+        entirely, the following is applied instead:
   (defface default spec)
+  (X resources (if applicable))
    |
   defface override spec"
   (while (get face 'face-alias)
     (setq face (get face 'face-alias)))
   (face-spec-reset-face face frame)
-  (make-face-x-resource-internal face frame)
   ;; If FACE is customized or themed, set the custom spec from
   ;; `theme-face' records.
   (let ((theme-faces (get face 'theme-face))
@@ -1666,10 +1670,12 @@ After the reset, the specs are applied from the following sources in this order:
            (setq theme-face-applied t))))
     ;; If there was a spec applicable to FRAME, that overrides the
     ;; defface spec entirely (rather than inheriting from it).  If
-    ;; there was no spec applicable to FRAME, apply the defface spec.
+    ;; there was no spec applicable to FRAME, apply the defface spec
+    ;; as well as any applicable X resources.
     (unless theme-face-applied
       (setq spec (face-spec-choose (face-default-spec face) frame))
-      (face-spec-set-2 face frame spec))
+      (face-spec-set-2 face frame spec)
+      (make-face-x-resource-internal face frame))
     (setq spec (face-spec-choose (get face 'face-override-spec) frame))
     (face-spec-set-2 face frame spec)))