Mercurial > emacs
changeset 4227:b283670201b4
(Fdelete_frame): Allow deletion if there is some other
visible (perhaps iconified) frame. Also allow deleting terminal frame
if there are X frames.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 22 Jul 1993 09:01:22 +0000 |
parents | 7c7e33d6386d |
children | f1441ca7277e |
files | src/frame.c |
diffstat | 1 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/frame.c Thu Jul 22 08:53:43 1993 +0000 +++ b/src/frame.c Thu Jul 22 09:01:22 1993 +0000 @@ -574,7 +574,7 @@ "Return the next frame in the frame list after FRAME.\n\ By default, skip minibuffer-only frames.\n\ If omitted, FRAME defaults to the selected frame.\n\ -If optional argument MINIFRAME is non-nil, include minibuffer-only frames.\n\ +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.\n\ If MINIFRAME is a window, include only frames using that window for their\n\ minibuffer.\n\ If MINIFRAME is non-nil and not a window, include all frames.") @@ -615,9 +615,29 @@ if (! FRAME_LIVE_P (f)) return Qnil; - /* Are there any other frames besides this one? */ - if (f == selected_frame && EQ (next_frame (frame, Qt), frame)) - error ("Attempt to delete the only frame"); + /* If all other frames are invisible, refuse to delete. + (Exception: allow deleting the terminal frame when using X.) */ + if (f == selected_frame) + { + Lisp_Object frames; + int count = 0; + + for (frames = Vframe_list; + CONSP (frames); + frames = XCONS (frames)->cdr) + { + Lisp_Object this = XCONS (frames)->car; + + if (FRAME_VISIBLE_P (XFRAME (this)) + || FRAME_ICONIFIED_P (XFRAME (this)) + /* Allow deleting the terminal frame when at least + one X frame exists! */ + || FRAME_X_P (XFRAME (this)) && !FRAME_X_P (f)) + count++; + } + if (count == 1) + error ("Attempt to delete the only frame"); + } /* Does this frame have a minibuffer, and is it the surrogate minibuffer for any other frame? */