From bc6953b32f993be10ff3429af5bacb7e18b08ae7 Mon Sep 17 00:00:00 2001 From: Matthias Dahl Date: Mon, 28 Apr 2014 22:14:17 +0300 Subject: [PATCH] Fix bug 16694 with applying X resources to faces too early. 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 | 8 ++++++++ lisp/faces.el | 18 ++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e27d7b1c6a..26516fd2cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2014-04-27 Matthias Dahl + + * 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 * textmodes/rst.el (electric-pair-pairs): Declare. diff --git a/lisp/faces.el b/lisp/faces.el index 88b87486f7..df31e0dfbd 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -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))) -- 2.20.1