]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix frame focus redirection with shared minibuffer windows (Bug#24500)
authorMartin Rudalics <rudalics@gmx.at>
Mon, 17 Oct 2016 08:52:01 +0000 (10:52 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Mon, 17 Oct 2016 08:52:01 +0000 (10:52 +0200)
* src/frame.c (do_switch_frame): Redirect frame focus also when
the frame switched to has its minibuffer window on the selected
frame.
* src/window.c (candidate_window_p): To qualify as candidate
it's not sufficient for the window's frame to just share the
minibuffer window - it must be active as well.

src/frame.c
src/window.c

index 45559b0be9822b191c846ea903c3b9140e0e305e..a1c2199d044d586a836747f7f73c599038cc312a 100644 (file)
@@ -1160,7 +1160,12 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
       if (FRAMEP (xfocus))
        {
          focus = FRAME_FOCUS_FRAME (XFRAME (xfocus));
-         if (FRAMEP (focus) && XFRAME (focus) == SELECTED_FRAME ())
+         if ((FRAMEP (focus) && XFRAME (focus) == SELECTED_FRAME ())
+             /* Redirect frame focus also when FRAME has its minibuffer
+                window on the selected frame (see Bug#24500).  */
+             || (NILP (focus)
+                 && EQ (FRAME_MINIBUF_WINDOW (XFRAME (frame)),
+                        sf->selected_window)))
            Fredirect_frame_focus (xfocus, frame);
        }
     }
index 753ebc16fbff0f06b3700c629307297ff01c3c06..acbefcdad1693e8709421a57a60bf24592c2f4c0 100644 (file)
@@ -2377,8 +2377,10 @@ candidate_window_p (Lisp_Object window, Lisp_Object owindow,
            == FRAME_TERMINAL (XFRAME (selected_frame)));
     }
   else if (WINDOWP (all_frames))
-    candidate_p = (EQ (FRAME_MINIBUF_WINDOW (f), all_frames)
-                  || EQ (XWINDOW (all_frames)->frame, w->frame)
+    /*         To qualify as candidate, it's not sufficient for WINDOW's frame
+       to just share the minibuffer window - it must be active as well
+       (see Bug#24500).  */
+    candidate_p = (EQ (XWINDOW (all_frames)->frame, w->frame)
                   || EQ (XWINDOW (all_frames)->frame, FRAME_FOCUS_FRAME (f)));
   else if (FRAMEP (all_frames))
     candidate_p = EQ (all_frames, w->frame);