comparison lisp/frame.el @ 5473:ac37a5f7e5be

Merge with trunk.
author Mats Lidell <matsl@xemacs.org>
date Thu, 17 Mar 2011 23:42:59 +0100
parents 308d34e9f07d 8b70d37ab80e
children 9a046b2e6494
comparison
equal deleted inserted replaced
5472:e79980ee5efe 5473:ac37a5f7e5be
471 ;; If the initial frame is serving as a surrogate 471 ;; If the initial frame is serving as a surrogate
472 ;; minibuffer frame for any frames, we need to wean them 472 ;; minibuffer frame for any frames, we need to wean them
473 ;; onto a new frame. The default-minibuffer-frame 473 ;; onto a new frame. The default-minibuffer-frame
474 ;; variable must be handled similarly. 474 ;; variable must be handled similarly.
475 (let ((users-of-initial 475 (let ((users-of-initial
476 (filtered-frame-list 476 (remove-if-not
477 #'(lambda (frame) 477 #'(lambda (frame)
478 (and (not (eq frame frame-initial-frame)) 478 (and (not (eq frame frame-initial-frame))
479 (eq (window-frame 479 (eq (window-frame
480 (minibuffer-window frame)) 480 (minibuffer-window frame))
481 frame-initial-frame)))))) 481 frame-initial-frame)))
482 (frame-list))))
482 (if (or users-of-initial 483 (if (or users-of-initial
483 (eq default-minibuffer-frame frame-initial-frame)) 484 (eq default-minibuffer-frame frame-initial-frame))
484 485
485 ;; Choose an appropriate frame. Prefer frames which 486 ;; Choose an appropriate frame. Prefer frames which
486 ;; are only minibuffers. 487 ;; are only minibuffers.
487 (let* ((new-surrogate 488 (let* ((new-surrogate
488 (car 489 (car
489 (or (filtered-frame-list 490 (or (remove-if-not
490 #'(lambda (frame) 491 #'(lambda (frame)
491 (eq 'only 492 (eq 'only
492 (frame-property frame 'minibuffer)))) 493 (frame-property frame 'minibuffer)))
494 (frame-list))
493 (minibuffer-frame-list)))) 495 (minibuffer-frame-list))))
494 (new-minibuffer (minibuffer-window new-surrogate))) 496 (new-minibuffer (minibuffer-window new-surrogate)))
495 497
496 (if (eq default-minibuffer-frame frame-initial-frame) 498 (if (eq default-minibuffer-frame frame-initial-frame)
497 (setq default-minibuffer-frame new-surrogate)) 499 (setq default-minibuffer-frame new-surrogate))
670 (make-obsolete 'new-frame 'make-frame) 672 (make-obsolete 'new-frame 'make-frame)
671 673
672 ;; XEmacs change: Emacs has make-frame here. We have it in C, so no need for 674 ;; XEmacs change: Emacs has make-frame here. We have it in C, so no need for
673 ;; frame-creation-function. 675 ;; frame-creation-function.
674 676
675 ;; XEmacs addition: support optional DEVICE argument. 677 ;; XEmacs addition: support optional DEVICE argument, use delete-if-not.
676 (defun filtered-frame-list (predicate &optional device) 678 (defun filtered-frame-list (predicate &optional device)
677 "Return a list of all live frames which satisfy PREDICATE. 679 "Return a list of all live frames which satisfy PREDICATE.
678 If optional second arg DEVICE is non-nil, restrict the frames 680 If optional second arg DEVICE is non-nil, restrict the frames
679 returned to that device." 681 returned to that device."
680 (let ((frames (if device (device-frame-list device) 682 (delete-if-not predicate
681 (frame-list))) 683 (if device (device-frame-list device) (frame-list))))
682 good-frames)
683 (while (consp frames)
684 (if (funcall predicate (car frames))
685 (setq good-frames (cons (car frames) good-frames)))
686 (setq frames (cdr frames)))
687 good-frames))
688 684
689 ;; XEmacs addition: support optional DEVICE argument. 685 ;; XEmacs addition: support optional DEVICE argument.
690 (defun minibuffer-frame-list (&optional device) 686 (defun minibuffer-frame-list (&optional device)
691 "Return a list of all frames with their own minibuffers. 687 "Return a list of all frames with their own minibuffers.
692 If optional second arg DEVICE is non-nil, restrict the frames 688 If optional second arg DEVICE is non-nil, restrict the frames
693 returned to that device." 689 returned to that device."
694 (filtered-frame-list 690 (delete-if-not
695 #'(lambda (frame) 691 #'(lambda (frame) (eq frame (window-frame (minibuffer-window frame))))
696 (eq frame (window-frame (minibuffer-window frame)))) 692 (if device (device-frame-list device) (frame-list))))
697 device))
698 693
699 ;; XEmacs omission: Emacs has frames-on-display-list here, but that is 694 ;; XEmacs omission: Emacs has frames-on-display-list here, but that is
700 ;; essentially equivalent to supplying the optional DEVICE argument to 695 ;; essentially equivalent to supplying the optional DEVICE argument to
701 ;; filtered-frame-list. 696 ;; filtered-frame-list.
702 697
1741 ;; reusing the existing one. 1736 ;; reusing the existing one.
1742 (let* ((defname 1737 (let* ((defname
1743 (or (plist-get default-frame-plist 'name) 1738 (or (plist-get default-frame-plist 'name)
1744 default-frame-name)) 1739 default-frame-name))
1745 (frames 1740 (frames
1746 (sort (filtered-frame-list #'(lambda (x) 1741 (sort (remove-if-not #'(lambda (x)
1747 (or (frame-visible-p x) 1742 (or (frame-visible-p x)
1748 (frame-iconified-p x)))) 1743 (frame-iconified-p x)))
1744 (frame-list))
1749 #'(lambda (s1 s2) 1745 #'(lambda (s1 s2)
1750 (cond ((and (frame-visible-p s1) 1746 (cond ((and (frame-visible-p s1)
1751 (not (frame-visible-p s2)))) 1747 (not (frame-visible-p s2))))
1752 ((and (eq (frame-visible-p s1) t) 1748 ((and (eq (frame-visible-p s1) t)
1753 (eq (frame-visible-p s2) 'hidden))) 1749 (eq (frame-visible-p s2) 'hidden)))