summaryrefslogtreecommitdiff
path: root/src/frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/frame.c')
-rw-r--r--src/frame.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/frame.c b/src/frame.c
index 795dcb3ca66..252dc591bfa 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1572,6 +1572,13 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
if (! FRAME_MINIBUF_ONLY_P (XFRAME (selected_frame)))
last_nonminibuf_frame = XFRAME (selected_frame);
+ /* If the selected window in the target frame is its mini-window, we move
+ to a different window, the most recently used one, unless there is a
+ valid active minibuffer in the mini-window. */
+ if (EQ (f->selected_window, f->minibuffer_window)
+ && NILP (Fminibufferp (XWINDOW (f->minibuffer_window)->contents, Qt)))
+ Fset_frame_selected_window (frame, call1 (Qget_mru_window, frame), Qnil);
+
Fselect_window (f->selected_window, norecord);
/* We want to make sure that the next event generates a frame-switch