1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-27 10:54:40 +00:00

Try to restore the initial "daemon" frame when a display goes down

* src/xterm.c (x_try_restore_frame): New function.
(x_connection_closed): Call it if selected_frame is nil.
This commit is contained in:
Po Lu 2022-07-14 18:47:10 +08:00
parent 2a05479c22
commit ade1238bce

View File

@ -23312,6 +23312,22 @@ x_trace_wire (Display *dpy)
static char *error_msg;
/* Try to find a frame in Vframe_list, and make it the selected frame.
`delete_frame' sometimes misses the initial frame for an unknown
reason when Emacs is running as a background daemon. */
static void
x_try_restore_frame (void)
{
Lisp_Object tail, frame;
FOR_EACH_FRAME (tail, frame)
{
if (!NILP (do_switch_frame (frame, 1, Qnil)))
return;
}
}
/* Handle the loss of connection to display DPY. ERROR_MESSAGE is
the text of an error message that lead to the connection loss. */
@ -23529,6 +23545,11 @@ For details, see etc/PROBLEMS.\n",
Fdelete_terminal (tmp, Qnoelisp);
}
/* The initial "daemon" frame is sometimes not selected by
`delete_frame' when Emacs is a background daemon. */
if (NILP (selected_frame))
x_try_restore_frame ();
unblock_input ();
/* Sometimes another terminal is still alive, but deleting this