about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--exwm-workspace.el15
-rw-r--r--exwm.el8
2 files changed, 12 insertions, 11 deletions
diff --git a/exwm-workspace.el b/exwm-workspace.el
index b73059ab4d19..3e2fe1abb591 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -1039,12 +1039,17 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first."
 (declare-function exwm-manage--unmanage-window "exwm-manage.el")
 (declare-function exwm--exit "exwm.el")
 
-(defun exwm-workspace--confirm-kill-emacs (prompt)
+(defun exwm-workspace--confirm-kill-emacs (prompt &optional force)
   "Confirm before exiting Emacs."
-  (when (pcase (length exwm--id-buffer-alist)
-          (0 (y-or-n-p prompt))
-          (x (yes-or-no-p (format "[EXWM] %d window%s currently alive. %s"
-                                  x (if (= x 1) "" "s") prompt))))
+  (when (or (and force (not (eq force 'no-check)))
+            (and (or (eq force 'no-check) (not exwm--id-buffer-alist))
+                 (y-or-n-p prompt))
+            (yes-or-no-p (format "[EXWM] %d window(s) will be destroyed.  %s"
+                                 (length exwm--id-buffer-alist) prompt)))
+    ;; Run `kill-emacs-hook' before Emacs frames are unmapped so that
+    ;; errors can be visible.
+    (run-hooks 'kill-emacs-hook)
+    (setq kill-emacs-hook nil)
     ;; Hide & reparent out all frames (save-set can't be used here since
     ;; X windows will be re-mapped).
     (when (exwm-workspace--minibuffer-own-frame-p)
diff --git a/exwm.el b/exwm.el
index b04990b32946..9a593d5ecac0 100644
--- a/exwm.el
+++ b/exwm.el
@@ -87,15 +87,11 @@
 (defun exwm-restart ()
   "Restart EXWM."
   (interactive)
-  (when (exwm-workspace--confirm-kill-emacs "[EXWM] Restart? ")
-    (server-force-delete)
-    (run-hooks 'kill-emacs-hook)
-    ;; FIXME: more?
+  (when (exwm-workspace--confirm-kill-emacs "[EXWM] Restart? " 'no-check)
     (apply #'call-process (car command-line-args) nil nil nil
            (cdr command-line-args))
     ;; Kill this instance at last.
-    (let ((kill-emacs-hook nil))
-      (kill-emacs))))
+    (kill-emacs)))
 
 (defun exwm--update-window-type (id &optional force)
   "Update _NET_WM_WINDOW_TYPE."