diff options
-rw-r--r-- | src/xterm.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/xterm.c b/src/xterm.c index 1d0e69d32bc..85367b78e3c 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -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 |