Fix bugs on managing/unmanaging X windows

* exwm-manage.el (exwm-manage--scan): Unmap X windows before managing them.

(exwm-manage--on-UnmapNotify): Do not ignore synthetic UnmapNotify events
(according to ICCCM).  Do not use the `from-configure' slot which was
mistakenly introduced due to the bug in `exwm-manage--scan'.

* exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Do more cleanups.
This commit is contained in:
Chris Feng 2016-02-09 13:26:48 +08:00
parent fb9bfd2911
commit 35d04c3468
2 changed files with 27 additions and 10 deletions

View file

@ -462,11 +462,29 @@ This functions is modified from `display-buffer-reuse-window' and
(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))))
;; Remove SubstructureRedirect event.
(xcb:+request exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
:window exwm--root :value-mask xcb:CW:EventMask
:event-mask 0))
;; Remove the _NET_SUPPORTING_WM_CHECK X window.
(with-slots (value)
(xcb:+request-unchecked+reply exwm--connection
(make-instance 'xcb:ewmh:get-_NET_SUPPORTING_WM_CHECK
:window exwm--root))
(xcb:+request exwm--connection
(make-instance 'xcb:DeleteProperty
:window exwm--root
:property xcb:Atom:_NET_SUPPORTING_WM_CHECK))
(xcb:+request exwm--connection
(make-instance 'xcb:DestroyWindow :window value)))
;; Unmanage all X windows.
(dolist (i exwm--id-buffer-alist)
(exwm-manage--unmanage-window (car i) t)
(xcb:+request exwm--connection
(make-instance 'xcb:MapWindow :window (car i))))
(xcb:flush exwm--connection)
(xcb:disconnect exwm--connection)
t))
(defun exwm-workspace--init ()