]> git.eshelyaron.com Git - emacs.git/commitdiff
Ignore focus events for dead frames
authorDaniel Colascione <dancol@dancol.org>
Wed, 13 Jun 2018 06:09:23 +0000 (23:09 -0700)
committerDaniel Colascione <dancol@dancol.org>
Wed, 13 Jun 2018 06:09:23 +0000 (23:09 -0700)
Frames can die between the time we generate a focus event and the time
we get around to processing it.  Do run after-focus-change-function,
since that's idempotent and we want to make sure not to miss
any changes.

* lisp/frame.el (handle-focus-in, handle-focus-out): Check for dead frames.

lisp/frame.el

index 7dbd346bd911dcc3a84bbb6aebffca84050c6a26..70b4b242a021f82731a2e2028eed88529e41fa25 100644 (file)
@@ -209,11 +209,12 @@ the window system."
   (interactive "e")
   (unless (eq (car-safe event) 'focus-in)
     (error "handle-focus-in should handle focus-in events"))
-  (internal-handle-focus-in event)
   (let ((frame (nth 1 event)))
-    (setf (frame-parameter frame 'last-focus-update) t)
-  (run-hooks 'focus-in-hook)
-  (funcall after-focus-change-function)))
+    (when (frame-live-p frame)
+      (internal-handle-focus-in event)
+      (setf (frame-parameter frame 'last-focus-update) t)
+      (run-hooks 'focus-in-hook)))
+  (funcall after-focus-change-function))
 
 (defun handle-focus-out (event)
   "Handle a focus-out event.
@@ -225,9 +226,10 @@ that's not the whole story: see `after-focus-change-function'."
   (unless (eq (car event) 'focus-out)
     (error "handle-focus-out should handle focus-out events"))
   (let ((frame (nth 1 event)))
-    (setf (frame-parameter frame 'last-focus-update) nil)
-    (run-hooks 'focus-out-hook)
-    (funcall after-focus-change-function)))
+    (when (frame-live-p frame)
+      (setf (frame-parameter frame 'last-focus-update) nil)
+      (run-hooks 'focus-out-hook)))
+  (funcall after-focus-change-function))
 
 (defun handle-move-frame (event)
   "Handle a move-frame event.