Subject: Re: bug#24500: 25.1.50; Can't other-window from minibuffer if Ediff control panel frame present

From: martin rudalics <[email-masked]>
Date: Sat, 01 Oct 2016 15:08:56 +0200

>> With "activated window at the window-manager level" you mean the window
 >> that has input focus and has its title bar painted differently from
 >> other windows but is not necessarily the topmost window in the Z-order?
 >> That window is here the one showing frame 1 after you switched to it via
 >> C-x o.
 >
 > It's the one showing frame 2, as I said.

So we seem to have another problem.  Just to make sure, I use a mingw32
build of Emacs 25 on Windos XP with the following patch

--- a/src/frame.c
+++ b/src/frame.c
@@ -1157,7 +1157,10 @@ 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 ())
+	      || (NILP (focus)
+		  && EQ (FRAME_MINIBUF_WINDOW (XFRAME (frame)),
+			 sf->selected_window)))
  	    Fredirect_frame_focus (xfocus, frame);
  	}
      }

Now with emacs -Q I put the following form

(make-frame '((minibuffer . nil)))

in *scratch* and evaluate it via C-x C-e.  This gets me a new frame, say
F2 which is selected and has input focus.  To avoid confusion I make the
sole window in F2 show *Messages*.

Now I do C-x 5 o which gets me back to the initial frame, say F1.  F1 is
selected and has input focus.  Now I do M-x.  F1 is still selected and
has input focus.  Now I do C-x 5 o.  F2 gets selected and has input
focus.  Can we agree until here?

Now I do C-x o.  This selects F1 and gives it input focus with the
*scratch* window selected.  Typed text appears in *scratch*.  If F1 and
F2 overlap, F2 obscures F1.  I suppose you observe something different
here.  Now I do C-x o again.  This selects the minibuffer window on F1.
Typed text now appears in the echo area.

 > Here, after typing M-x in *scratch* in the recipe:
 > * if I type C-x o the activated window does not change;

You mean C-x o does not take you to F2 in my parlance.  Here F2 gets
selected and input focus.

 > * if I type C-x 5 o the activated window does change.
 >
 > Is that the visible difference you mean?

It's not in your original scenario but apparently our installations
differ here.  Are you sure you applied the same change as I did?

 >> But what's wrong with that?  After all you _did_ use C-x o to select
 >> that window.
 >
 > It's not wrong until you type Alt-Tab.

Alt-tabbing was not part of your scenarios so far.  Please give a
step-by-step recipe indicating the first time it fails.

 >> Do you mean that on frame 1 you cannot use Alt-Tab to switch to frame 2?
 >
 > Possibly.
 >
 > Typing Alt-Tab several times switches the window-manager's activation
 > between frame 1 and frame 2 (and other windows that may be present
 > if you hold Alt and type Tab more than once). I can switch activation between
 > the two Emacs windows and any other windows as much as I like, as
 > evidenced by the title-bar painting style.
 >
 > But no amount of typing Alt-Tab changes which Emacs window contains
 > the solid flashing cursor where text is inserted when I type characters.

Here Alt-Tab always switches between all Emacs frames.  Otherwise we
would have had problems on any multi-frame layed-out Emacs.  And
certainly we would have had problems in an unpatched Emacs when invoking
M-x from the minibuffer-less frame.  Can you try if C-x o fails for that
as well?

 > Firstly, no, I'm in frame 2.

So you mean that frame 2 has input focus and is selected and clicking on
frame 1 does not select frame 1 and give it input focus?  Something must
be broken on your side.

 > Secondly, I'm saying that any amount of switching between windows,
 > either using Alt-Tab, or by clicking on title bars, makes no difference
 > to the window where text is inserted.

Can anyone observe that?  I just tried on Windows 7 and see the same
behavior as on XP.

 >> Here at any moment I can use Alt-Tab or the mouse to select any of the
 >> three windows involved in your scenario and continue typing text there.
 >> If this doesn't work on your system please tell me precisely where it
 >> fails.
 >
 > I have tried to do that.

I'm left without clues.

martin