aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2010-11-13 13:34:02 -0500
committerChong Yidong2010-11-13 13:34:02 -0500
commit0216b7387894b3b7d5556ec2cadf3f18e4a1a882 (patch)
tree91f7c6802aedb0cdb9916d8f6bb49d35c28ad27f
parent4a9f985c252aaefaf0a28e17c9f874b9d977b915 (diff)
downloademacs-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/ChangeLog6
-rw-r--r--lisp/frame.el56
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 @@
12010-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
12010-11-13 Eli Zaretskii <eliz@gnu.org> 72010-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)