(Fdelete_frame): If FORCE, don't call hooks.
If FORCE, and frame has a surrogate minibuffer for another frame, delete the other frame first.
This commit is contained in:
parent
ec6d1b1413
commit
a31787b1e9
2 changed files with 24 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-02-08 Richard Stallman <rms@gnu.org>
|
||||
|
||||
* frame.c (Fdelete_frame): If FORCE, don't call hooks.
|
||||
If FORCE, and frame has a surrogate minibuffer for another frame,
|
||||
delete the other frame first.
|
||||
|
||||
2008-02-07 Timo Savola <timo.savola@iki.fi>
|
||||
|
||||
* xterm.c (x_detect_focus_change): Handle embed client message.
|
||||
|
|
22
src/frame.c
22
src/frame.c
|
@ -1342,7 +1342,9 @@ but if the second optional argument FORCE is non-nil, you may do so.
|
|||
|
||||
This function runs `delete-frame-functions' before actually deleting the
|
||||
frame, unless the frame is a tooltip.
|
||||
The functions are run with one arg, the frame to be deleted. */)
|
||||
The functions are run with one arg, the frame to be deleted.
|
||||
But FORCE inhibits this too. */)
|
||||
/* FORCE is non-nil when handling a disconnected terminal. */
|
||||
(frame, force)
|
||||
Lisp_Object frame, force;
|
||||
{
|
||||
|
@ -1393,12 +1395,21 @@ The functions are run with one arg, the frame to be deleted. */)
|
|||
&& EQ (frame,
|
||||
WINDOW_FRAME (XWINDOW
|
||||
(FRAME_MINIBUF_WINDOW (XFRAME (this))))))
|
||||
error ("Attempt to delete a surrogate minibuffer frame");
|
||||
{
|
||||
/* If we MUST delete this frame, delete the other first. */
|
||||
if (!NILP (force))
|
||||
Fdelete_frame (this, force);
|
||||
else
|
||||
error ("Attempt to delete a surrogate minibuffer frame");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Run `delete-frame-functions' unless frame is a tooltip. */
|
||||
if (!NILP (Vrun_hooks)
|
||||
/* Run `delete-frame-functions'
|
||||
unless FORCE is true or frame is a tooltip.
|
||||
FORCE is set when handling a disconnect from the terminal,
|
||||
so we don't dare call Lisp code. */
|
||||
if (!NILP (Vrun_hooks) && NILP (force)
|
||||
&& NILP (Fframe_parameter (frame, intern ("tooltip"))))
|
||||
{
|
||||
Lisp_Object args[2];
|
||||
|
@ -1418,6 +1429,9 @@ The functions are run with one arg, the frame to be deleted. */)
|
|||
if (! FRAME_LIVE_P (f))
|
||||
return Qnil;
|
||||
|
||||
/* At this point, we are committed to deleting the frame.
|
||||
There is no more chance for errors to prevent it. */
|
||||
|
||||
minibuffer_selected = EQ (minibuf_window, selected_window);
|
||||
|
||||
/* Don't let the frame remain selected. */
|
||||
|
|
Loading…
Add table
Reference in a new issue