Subject: bug#28496: 25.2; Crash when manipulating fullscreen frames on macOS

From: Alan Third <[email-masked]>
Date: Sun, 1 Oct 2017 00:23:23 +0100

On Tue, Sep 19, 2017 at 04:49:16PM +0100, Duncan Harvey wrote:
> 
> On macOS Sierra, creating the new frame appears to create a macOS-style tab in the same 'space'.
> On El Capitan, creating the new frame creates a new Mac OS X 'space'.

Emacs 26 shouldn’t create a new tab any more.

> Animating the creation of a new space certainly appears to be
> relatively slow (when running under a VM, at least), which lends
> weight to your suspicion that it's timing related.

I can’t see any way around this in C. I can’t even find a way to
prevent native fullscreen from animating, so I’ve gone with just
causing toggle-frame-fullscreen to pause for 1 second on macOS.

I don’t think anyone will be too bothered by this as I don’t think you
can realistically do anything in Emacs while the animation is running
anyway.

BTW, running your script with native fullscreen disabled causes a
crash here, and this pause fixes that too. In theory non‐native
fullscreen should happen instantly, but there’s a pause in the C code
too to fix another issue, so whatever. (see bug#28443)

Patch attached.
-- 
Alan Third
>From 2d756250d7990dc9a6a452e8282cc32d16d2099a Mon Sep 17 00:00:00 2001
From: Alan Third <[email-masked]>
Date: Sun, 1 Oct 2017 00:06:23 +0100
Subject: [PATCH] Fix fullscreen crash on macOS (bug#28496)

* lisp/frame.el (toggle-frame-fullscreen): Wait for animation to
complete on macOS.
---
 lisp/frame.el | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lisp/frame.el b/lisp/frame.el
index 76c1842455..b70f55e981 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -2434,7 +2434,11 @@ toggle-frame-fullscreen
 	      (set-frame-parameter nil 'fullscreen fullscreen-restore)
 	    (set-frame-parameter nil 'fullscreen nil)))
       (modify-frame-parameters
-       nil `((fullscreen . fullboth) (fullscreen-restore . ,fullscreen))))))
+       nil `((fullscreen . fullboth) (fullscreen-restore . ,fullscreen))))
+    ;; Manipulating a frame without waiting for the fullscreen
+    ;; animation to complete can cause a crash, or other unexpected
+    ;; behaviour, on macOS (bug#28496).
+    (when (featurep 'cocoa) (sit-for 1))))
 
 ;;;; Key bindings
 
-- 
2.14.1