On Jul 16, 2019, at 22:28, Alan Third wrote: > > On Mon, Jul 15, 2019 at 08:38:31PM +0300, Andrii Kolomoiets wrote: >> Assume there are only one space - Desktop >> 1. emacs -Q >> 2. M-x toggle-frame-fullscreen >> Now there are two spaces - Desktop and *scratch* >> 3. eval (make-frame `((parent-frame . ,(window-frame)))) >> Now there are three spaces: >> - Desktop >> - Empty space named *scratch* with emacs menu >> - *scratch* with emacs frames but without menu > > I hit C-x C-c at this point to exit Emacs and it completely crashed my > session. Not great... > > The patch looks good to me, but lets see if we can find solutions to > these other issues. To be honest, given that Apple don’t provide any > way to properly deal with spaces, I’d expect this stuff to be handled > sensibly by default, but I guess that’s too much to ask. > >> 1. Removing parent-frame property leaves the frame is same space: >> >> (let ((new-frame (make-frame `((parent-frame . ,(window-frame)))))) >> (modify-frame-parameters new-frame `((parent-frame . nil)))) >> >> Maybe child frame must go fullscreen if ex-parent frame is in >> fullscreen. > > I suppose the best thing to do would be to move it onto the first > space, but there’s no API for that, apparently. Going fullscreen seems > like a reasonable work‐around to me. > I manage to make this code work. Please see attached updated patch. But this patch is not completely ready as it missing compilation conditions. Just hope you find it useful. >> 2. Setting parent frame after frame creation: >> >> (let ((frame (window-frame)) >> (new-frame (make-frame))) >> (modify-frame-parameters new-frame `((parent-frame . ,frame)))) > > What do you see happening in this case? I’ve got spaces turned on and > everything I do just seems to create a new fullscreen space (except > when it crashes my session). > I see same result as in the first case: Desktop, empty blank space with Emacs menu, space with Emacs frame and no menu/titlebar. Still can't make this case work. Probably window animation stand in the way: nsterm.m : 1869: [ 376] ns_set_parent_frame nsterm.m : 1912: [ 377] | child frame must not be in fullscreen 2019-07-17 21:20:49.027 Emacs[91925:3597098] not in fullscreen state If ns_set_parent_frame is called while window is still in process of going full screen then maybe it must be deferred until animation ends.