diff options
author | Po Lu <luangruo@yahoo.com> | 2022-07-14 18:47:10 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-07-14 18:49:19 +0800 |
commit | ade1238bce1cf69ebce8809a2d73cb92db94b977 (patch) | |
tree | 2eee5f604958e5bead901ce67c5299c935b98775 | |
parent | 2a05479c221d4a13b15ed731e4eb1c0de99e97ed (diff) | |
download | emacs-ade1238bce1cf69ebce8809a2d73cb92db94b977.tar.gz |
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.
-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 |