Subject: bug#78527: 30.1; Mishaving new frame creation in MacOS on new desktop

From: Boris Aronov <[email-masked]>
Date: Wed, 4 Jun 2025 19:17:50 +0200

Hi Martin,

On Wed, Jun 4, 2025 at 10:47 AM martin rudalics <[email-masked]> wrote:

> Thanks for answering.
>
> I'm still a bit dense in the following sense: You have a fullscreen
> frame, do C-x 5 2 and now see the new frame on a new desktop but it
> apparently didn't get focus because, as you say, the prompt doesn't
> appear there.  However, in your initial posting you say that "Focus
> shifts there".  What makes you think that focus shifted there?  The
> appearance of the cursor, the mode line, some decoration in the new
> frame?  Does C-x 2 split a window in the new or old frame?
>

C-x 2: New frame, surprisingly.  But subsequent commands are still messed
up.  For example, after C-x 2 I now have 2 windows in the new frame, but if
I try M-x, the prompt shows up the old frame!  That's without trying any of
the hooks you suggested.

Focus: Sorry.  I did not use the right terminology.  I only at the moment
work on my laptop with a single physical screen.  So when a "new frame
opens on new desktop",  what I see on my physical screen is the old desktop
slides off to the left and a new desktop with a new frame appears.  I
probably should not have used the word "focus."  I get a new frame with a
highlighted cursor in the main window.

Just noticed another weirdness, btw:
– I see a blinking cursor with emacs -Q.
– But after I have two frames in different desktops, immediately after I
switch between desktops (in either direction), the cursor is highlighted,
but does not blink.
– In fact, this cursor thing has nothing to do with full screen or
desktops: with two regular frames next to each other on a common desktop,
when *I click on a frame to switch focus there*, the cursor gets
highlighted, but does not blink until I do something...  *But if I do C-x 5
2 to switch frames, *it blinks as it should.  And when I switch from
Firefox (where I am writing this) to Emacs (using Alt-TAB [=command-TAB]),
the cursor initially does not blink.

Another experiment (similar to what I wrote in an earlier email): Do the
C-x 5 2 from a full-screen frame.  Do a M-x.  I do *not* see the prompt.
Now use MacOS shortcut keys to switch frames (ctrl-right/left).  Then the
M-x prompt appears in BOTH frames.  In one it is selected (cursor is
highlighted) and in the other it is not (highlighted cursor is in the main
*scratch* window).  This is w/o any of the hooks you wanted me to try.
Just plain Macports Emacs -Q.

Hope this helps,
  –Boris

>  >> I'd like to understand the focus issue.  What does C-x 5 o do when run
>  >> in the old frame?
>  >
>  >
>  > - Opened "Emacs -Q"
>  > - Clicked the green button (fullscreen)
>  > - C-x 5 2 (new frame opens on another desktop)
>  > - I swipe to original desktop
>  > - C-x 5 o switches to the new one and repeating it takes me back
>
> Does C-x 5 o also switch the desktop you see?
>
>  > What does running 'foo' defined as
>  >>
>  >> (defun foo ()
>  >>     (interactive)
>  >>     (let ((frame (make-frame)))
>  >>       (sit-for 3)
>  >>       (message "%s" (frame-focus-state frame))))
>  >>
>  >
>  > When I do this in an non-full-screen frame, a new frame pops up with a
> "t"
>  >
>  > When I do it in a full-screen frame, a new frame pops up but a "t' is in
>  > the OLD frame.  And then (I think) with some delay it also appears in
> the
>  > NEW frame.
>
> This "delay" should come from the (sit-for 3) call.
>
>  >> report?  Is the message shown in both frames?
>  >>
>  >> Does 'foo' specified as
>  >>
>  >> (defun foo ()
>  >>     (interactive)
>  >>     (let ((frame (make-frame)))
>  >>       (select-frame-set-input-focus frame)))
>  >>
>  >> behave the same way?
>  >
>  >
>  > I get a "nil" in both frames.
>
> The nil would come from the return value of the frame focusing function
> so my question was silly.  What I really meant with "behave the same
> way" was whether the new frame does get input focus with this 'foo',
> that is, whether now Emacs shows the prompt in the new frame when you
> try executing a command.  I suppose the answer is "no".
>
>  > Hard to tell if it's simulataneous (as I
>  > cannot look at them at the same time) and maybe switching desktops
> triggers
>  > something.
>  >
>  >    Does
>  >>
>  >> (add-hook 'after-make-frame-functions 'select-frame-set-input-focus)
>  >>
>  >> change anything?
>  >
>  >
>  > Not really.  When I make a new frame, a new frame on a new desktop
> appears,
>  > but typing M-x shows no change on screen.  When I switch back to the
>  > original screen M-x shows on screen AND when I switch again NOW I can
> see
>  > M-x prompt on the new screen as well.
>  >
>  >
>  >    Does
>  >>
>  >> (add-hook 'after-make-frame-functions 'redirect-frame-focus)
>  >>
>  >> change anything?
>  >>
>  >
>  > No.  Same behavior as after the other add-hook.
>
> I see.
>
>  > Another oddity (or is it expected): when I switch back-and-forth between
>  > desktops having typed M-x, on one screen the focus (selected window?)
> is on
>  > the M-x line and on the other on *scratch* (where I originally ran the
> C-x
>  > 5 2 command).  Not sure which is which by now...
>  >
>  > Actually, after a few switches back and forth, the M-x line is the
> selected
>  > window in the frame where I typed it (new frame) and it's not selected
> in
>  > the old frame.
>  >
>  > Not sure if this helps in any way.
>
> Not yet.  If you have two normal (non-fullscreen) frames of the same
> Emacs process on two different desktops, type a command so that a prompt
> appears in one of them and then do C-x 5 o: Does the prompt move to the
> other frame?  Right away?
>
> BTW: Do you have Mission Control installed and active?  Maybe some
> setting in it triggers the "put the frame on the other desktop because
> the first one is too crowded" behavior.
>
> martin
>