emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: macOS child frame lower behavior


From: Aaron Jensen
Subject: Re: macOS child frame lower behavior
Date: Thu, 28 May 2020 17:16:31 -0700

On Thu, May 28, 2020 at 9:54 AM martin rudalics <rudalics@gmx.at> wrote:
>
>  > It apparently means the entire screen list on the desktop.
>
> Sounds bad (though I have no idea what "screen list" stands for).

Yeah, I just read it as list of windows, but who knows if that's
actually what it means.

>  > AFAICT, at least in Emacs, it does not do what is described. I created
>  > two child frames and attempted to restack them so that the second
>  > created one was above the first. This seemed to have no effect.
>
> I see.  The code works here as intended with a GNUStep build (under
> Debian's xfwm) so the problem is not on the Emacs side.  Does
> 'raise-frame' with two child frames work as intended?

No, it focuses the frame raised, but does not change its layering.

> What happens when
> you have two overlapping child frames and you click into the lower one?
> Does it raise to the top?

No, it does not.

> IIUC the following setup (which works here)
> would fail: Make two normal frames A and B with A overlapping B and on B
> make two child frames C and D where C overlaps D.  If you now in frame A
> evaluate (raise-frame D), does as a side-effect B overlap A?

Yes, whatever is done to a child actually impacts the parent.

> If we cannot fix that in some other way, we should probably make
> lowering a child frame a NOOP on MacOS when it is the sole child frame
> of its parent.  If there are two child frames, we could try to raise the
> other one, if that works somehow.  For more complicated situations, we'd
> have to look whether there exists a z-order for child frames and use
> that.

If you remove a child and re-add it, you can change the order, which
works for raise_frame, because when you add the child frame back it
gets added as the top-most. I don't know how to emulate a lower_frame
short of removing all of the children and then re-adding them in the
proper order (with the one being lowered first). Here's an example of
that working:

https://github.com/aaronjensen/child-frame-order-back-repro

Specifically: 
https://github.com/aaronjensen/child-frame-order-back-repro/blob/master/ChildWindowTest/ChildWindowController.m#L24-L47

Aaron



reply via email to

[Prev in Thread] Current Thread [Next in Thread]