diff options
| author | Chong Yidong | 2010-11-13 13:34:02 -0500 |
|---|---|---|
| committer | Chong Yidong | 2010-11-13 13:34:02 -0500 |
| commit | 0216b7387894b3b7d5556ec2cadf3f18e4a1a882 (patch) | |
| tree | 91f7c6802aedb0cdb9916d8f6bb49d35c28ad27f | |
| parent | 4a9f985c252aaefaf0a28e17c9f874b9d977b915 (diff) | |
| download | emacs-0216b7387894b3b7d5556ec2cadf3f18e4a1a882.tar.gz emacs-0216b7387894b3b7d5556ec2cadf3f18e4a1a882.zip | |
Fix background-color setting in initial frame (Bug#7373).
* lisp/frame.el (frame-notice-user-settings): Don't clobber other
user-set parameters when calling face-set-after-frame-default in
response to background-color parameter (Bug#7373).
| -rw-r--r-- | lisp/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/frame.el | 56 |
2 files changed, 34 insertions, 28 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2ca047df52e..1e4a8590f29 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2010-11-13 Chong Yidong <cyd@stupidchicken.com> | ||
| 2 | |||
| 3 | * frame.el (frame-notice-user-settings): Don't clobber other | ||
| 4 | user-set parameters when calling face-set-after-frame-default in | ||
| 5 | response to background-color parameter (Bug#7373). | ||
| 6 | |||
| 1 | 2010-11-13 Eli Zaretskii <eliz@gnu.org> | 7 | 2010-11-13 Eli Zaretskii <eliz@gnu.org> |
| 2 | 8 | ||
| 3 | * international/characters.el (glyphless-char-display-control): | 9 | * international/characters.el (glyphless-char-display-control): |
diff --git a/lisp/frame.el b/lisp/frame.el index 06e2268c697..b133851b440 100644 --- a/lisp/frame.el +++ b/lisp/frame.el | |||
| @@ -296,22 +296,19 @@ there (in decreasing order of priority)." | |||
| 296 | (null frame-initial-frame)) | 296 | (null frame-initial-frame)) |
| 297 | ;; This case happens when we don't have a window system, and | 297 | ;; This case happens when we don't have a window system, and |
| 298 | ;; also for MS-DOS frames. | 298 | ;; also for MS-DOS frames. |
| 299 | (let ((parms (frame-parameters frame-initial-frame))) | 299 | (let ((parms (frame-parameters))) |
| 300 | ;; Don't change the frame names. | 300 | ;; Don't change the frame names. |
| 301 | (setq parms (delq (assq 'name parms) parms)) | 301 | (setq parms (delq (assq 'name parms) parms)) |
| 302 | ;; Can't modify the minibuffer parameter, so don't try. | 302 | ;; Can't modify the minibuffer parameter, so don't try. |
| 303 | (setq parms (delq (assq 'minibuffer parms) parms)) | 303 | (setq parms (delq (assq 'minibuffer parms) parms)) |
| 304 | (modify-frame-parameters nil | 304 | (modify-frame-parameters |
| 305 | (if (null initial-window-system) | 305 | nil |
| 306 | (append initial-frame-alist | 306 | (if initial-window-system |
| 307 | window-system-frame-alist | 307 | parms |
| 308 | default-frame-alist | 308 | ;; initial-frame-alist and default-frame-alist were already |
| 309 | parms | 309 | ;; applied in pc-win.el. |
| 310 | nil) | 310 | (append initial-frame-alist window-system-frame-alist |
| 311 | ;; initial-frame-alist and | 311 | default-frame-alist parms nil))) |
| 312 | ;; default-frame-alist were already | ||
| 313 | ;; applied in pc-win.el. | ||
| 314 | parms)) | ||
| 315 | (if (null initial-window-system) ;; MS-DOS does this differently in pc-win.el | 312 | (if (null initial-window-system) ;; MS-DOS does this differently in pc-win.el |
| 316 | (let ((newparms (frame-parameters)) | 313 | (let ((newparms (frame-parameters)) |
| 317 | (frame (selected-frame))) | 314 | (frame (selected-frame))) |
| @@ -512,25 +509,28 @@ there (in decreasing order of priority)." | |||
| 512 | ;; it is undesirable to specify the parm again | 509 | ;; it is undesirable to specify the parm again |
| 513 | ;; once the user has seen the frame and been able to alter it | 510 | ;; once the user has seen the frame and been able to alter it |
| 514 | ;; manually. | 511 | ;; manually. |
| 515 | (while tail | 512 | (let (newval oldval) |
| 516 | (let (newval oldval) | 513 | (dolist (entry tail) |
| 517 | (setq oldval (assq (car (car tail)) | 514 | (setq oldval (assq (car entry) frame-initial-frame-alist)) |
| 518 | frame-initial-frame-alist)) | 515 | (setq newval (cdr (assq (car entry) allparms))) |
| 519 | (setq newval (cdr (assq (car (car tail)) allparms))) | ||
| 520 | (or (and oldval (eq (cdr oldval) newval)) | 516 | (or (and oldval (eq (cdr oldval) newval)) |
| 521 | (setq newparms | 517 | (setq newparms |
| 522 | (cons (cons (car (car tail)) newval) newparms)))) | 518 | (cons (cons (car entry) newval) newparms))))) |
| 523 | (setq tail (cdr tail))) | ||
| 524 | (setq newparms (nreverse newparms)) | 519 | (setq newparms (nreverse newparms)) |
| 525 | (modify-frame-parameters frame-initial-frame | 520 | |
| 526 | newparms) | 521 | (let ((new-bg (assq 'background-color newparms))) |
| 527 | ;; If we changed the background color, | 522 | ;; If the `background-color' parameter is changed, apply |
| 528 | ;; we need to update the background-mode parameter | 523 | ;; it first, then make sure that the `background-mode' |
| 529 | ;; and maybe some faces too. | 524 | ;; parameter and other faces are updated, before applying |
| 530 | (when (assq 'background-color newparms) | 525 | ;; the other parameters. |
| 531 | (unless (assq 'background-mode newparms) | 526 | (when new-bg |
| 532 | (frame-set-background-mode frame-initial-frame)) | 527 | (modify-frame-parameters frame-initial-frame |
| 533 | (face-set-after-frame-default frame-initial-frame))))) | 528 | (list new-bg)) |
| 529 | (unless (assq 'background-mode newparms) | ||
| 530 | (frame-set-background-mode frame-initial-frame)) | ||
| 531 | (face-set-after-frame-default frame-initial-frame) | ||
| 532 | (setq newparms (delq new-bg newparms))) | ||
| 533 | (modify-frame-parameters frame-initial-frame newparms))))) | ||
| 534 | 534 | ||
| 535 | ;; Restore the original buffer. | 535 | ;; Restore the original buffer. |
| 536 | (set-buffer old-buffer) | 536 | (set-buffer old-buffer) |