aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/frame.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/frame.el')
-rw-r--r--lisp/frame.el16
1 files changed, 14 insertions, 2 deletions
diff --git a/lisp/frame.el b/lisp/frame.el
index 299cfa52b0..3b3bf3eaae 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -1043,11 +1043,23 @@ should use `set-frame-height' instead."
(defun delete-other-frames (&optional frame)
"Delete all frames except FRAME.
-FRAME nil or omitted means delete all frames except the selected frame."
+If FRAME uses another frame's minibuffer, the minibuffer frame is
+left untouched. FRAME nil or omitted means use the selected frame."
(interactive)
(unless frame
(setq frame (selected-frame)))
- (mapcar 'delete-frame (delq frame (frame-list))))
+ (let* ((mini-frame (window-frame (minibuffer-window frame)))
+ (frames (delq mini-frame (delq frame (frame-list)))))
+ ;; Delete mon-minibuffer-only frames first, because `delete-frame'
+ ;; signals an error when trying to delete a mini-frame that's
+ ;; still in use by another frame.
+ (dolist (frame frames)
+ (unless (eq (frame-parameter frame 'minibuffer) 'only)
+ (delete-frame frame)))
+ ;; Delete minibuffer-only frames.
+ (dolist (frame frames)
+ (when (eq (frame-parameter frame 'minibuffer) 'only)
+ (delete-frame frame)))))
(make-obsolete 'screen-height 'frame-height) ;before 19.15