about summary refs log tree commit diff
path: root/exwm-manage.el
diff options
context:
space:
mode:
authorAdrián Medraño Calvo <adrian@medranocalvo.com>2018-03-06T00·00+0000
committerAdrián Medraño Calvo <adrian@medranocalvo.com>2018-03-06T00·00+0000
commit4f7abf4bfd41932fe23ce3e9544b8c425f1b2cd3 (patch)
tree56a0822cfcd18c17ed56819e3737c6294cba80d6 /exwm-manage.el
parentc00331a7e6e4282ca4e0cf1ee733fe642a6c6721 (diff)
Cleanup exwm-manage on exit
* exwm-manage.el (exwm-manage--unmanage-window): Map windows when
quitting.
(exwm-manage--exit): Remap all windows.

* exwm.el (exwm--exit): Reorder deinitialization sequence so that
windows are reparented before the workspaces are removed.
Diffstat (limited to 'exwm-manage.el')
-rw-r--r--exwm-manage.el13
1 files changed, 11 insertions, 2 deletions
diff --git a/exwm-manage.el b/exwm-manage.el
index b5c3f58dfdde..cb2bf28b173d 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -361,12 +361,17 @@ manager is shutting down."
           (xcb:+request exwm--connection
               (make-instance 'xcb:DeleteProperty
                              :window id :property xcb:Atom:WM_STATE))
-          (unless (eq withdraw-only 'quit)
+          (cond
+           ((eq withdraw-only 'quit)
+            ;; Remap the window when exiting.
+            (xcb:+request exwm--connection
+                (make-instance 'xcb:MapWindow :window id)))
+           (t
             ;; Remove _NET_WM_DESKTOP.
             (xcb:+request exwm--connection
                 (make-instance 'xcb:DeleteProperty
                                :window id
-                               :property xcb:Atom:_NET_WM_DESKTOP))))
+                               :property xcb:Atom:_NET_WM_DESKTOP)))))
         (when exwm--floating-frame
           ;; Unmap the floating frame before destroying its container.
           (let ((window (frame-parameter exwm--floating-frame 'exwm-outer-id))
@@ -670,6 +675,10 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
 
 (defun exwm-manage--exit ()
   "Exit the manage module."
+  (dolist (pair exwm--id-buffer-alist)
+    (exwm-manage--unmanage-window (car pair) 'quit))
+  (remove-hook 'after-make-frame-functions #'exwm-manage--add-frame)
+  (remove-hook 'delete-frame-functions #'exwm-manage--remove-frame)
   (setq exwm-manage--_MOTIF_WM_HINTS nil))