about summary refs log tree commit diff
path: root/exwm.el
diff options
context:
space:
mode:
authorChris Feng <chris.w.feng@gmail.com>2019-08-25T00·00+0000
committerChris Feng <chris.w.feng@gmail.com>2019-08-25T00·00+0000
commit5505cff826b361d5d0090a6314891005595e3279 (patch)
tree18ed9005bb3f1739c878a947312309f164094a78 /exwm.el
parent5b9f4b0851d27e8132a930dfbfec0b94099a4c9f (diff)
Fix a lock issue with _NET_CLOSE_WINDOW and WM_DELETE_WINDOW
* exwm.el (exwm--on-ClientMessage): Calling `kill-buffer' directly
from an event context won't work since the DestroyNotify event for a
WM_DELETE_WINDOW request won't be handled until the current event
context terminates.

* exwm-manage.el (exwm-manage--kill-buffer-query-function): Avoid
potential side effects with MapWindow.
Diffstat (limited to 'exwm.el')
-rw-r--r--exwm.el5
1 files changed, 3 insertions, 2 deletions
diff --git a/exwm.el b/exwm.el
index 9ebfabf9e8..8ea4a7636f 100644
--- a/exwm.el
+++ b/exwm.el
@@ -420,7 +420,8 @@
     (setq type (slot-value obj 'type)
           id (slot-value obj 'window)
           data (slot-value (slot-value obj 'data) 'data32))
-    (exwm--log "atom=%s(%s)" (x-get-atom-name type exwm-workspace--current) type)
+    (exwm--log "atom=%s(%s)" (x-get-atom-name type exwm-workspace--current)
+               type)
     (cond
      ;; _NET_NUMBER_OF_DESKTOPS.
      ((= type xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
@@ -459,7 +460,7 @@
      ((= type xcb:Atom:_NET_CLOSE_WINDOW)
       (let ((buffer (exwm--id->buffer id)))
         (when (buffer-live-p buffer)
-          (kill-buffer buffer))))
+          (exwm--defer 0 #'kill-buffer buffer))))
      ;; _NET_WM_MOVERESIZE
      ((= type xcb:Atom:_NET_WM_MOVERESIZE)
       (let ((direction (elt data 2))