emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 15cdf8f 5/6: Unmanage X windows on exit


From: Chris Feng
Subject: [elpa] externals/exwm 15cdf8f 5/6: Unmanage X windows on exit
Date: Sun, 07 Feb 2016 03:41:53 +0000

branch: externals/exwm
commit 15cdf8f5897183adf5426ecc280eb61626e2c980
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Unmanage X windows on exit
    
    * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): New function
    called on exit to unmanage X windows.
    (exwm-workspace--init): Set `confirm-kill-emacs' to
    `exwm-workspace--confirm-kill-emacs'.
    
    * exwm-manage.el (exwm-manage--on-UnmapNotify): Ignore UnmapNotify event
    generated as a result of parent being resized.
---
 exwm-manage.el    |    6 ++++--
 exwm-workspace.el |   20 ++++++++++++++------
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/exwm-manage.el b/exwm-manage.el
index b32d677..b899afb 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -421,8 +421,10 @@ Would you like to kill it? "
   (unless synthetic
     (let ((obj (make-instance 'xcb:UnmapNotify)))
       (xcb:unmarshal obj data)
-      (exwm--log "UnmapNotify from #x%x" (slot-value obj 'window))
-      (exwm-manage--unmanage-window (slot-value obj 'window) t))))
+      (with-slots (window from-configure) obj
+        (unless from-configure          ;the parent is being resized
+          (exwm--log "UnmapNotify from #x%x" window)
+          (exwm-manage--unmanage-window window t))))))
 
 (defun exwm-manage--on-DestroyNotify (data synthetic)
   "Handle DestroyNotify event."
diff --git a/exwm-workspace.el b/exwm-workspace.el
index b166733..f65c557 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -454,16 +454,24 @@ This functions is modified from 
`display-buffer-reuse-window' and
     (cancel-timer exwm-workspace--display-echo-area-timer)
     (setq exwm-workspace--display-echo-area-timer nil)))
 
+(defun exwm-workspace--confirm-kill-emacs (prompt)
+  "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))))
+    (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)
+    t))
+
 (defun exwm-workspace--init ()
   "Initialize workspace module."
   (cl-assert (and (< 0 exwm-workspace-number) (>= 10 exwm-workspace-number)))
   ;; Prevent unexpected exit
-  (setq confirm-kill-emacs
-        (lambda (prompt)
-          (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))))))
+  (setq confirm-kill-emacs #'exwm-workspace--confirm-kill-emacs)
   (if (not (exwm-workspace--minibuffer-own-frame-p))
       ;; Initialize workspaces with minibuffers.
       (progn



reply via email to

[Prev in Thread] Current Thread [Next in Thread]