about summary refs log tree commit diff
path: root/exwm-layout.el
diff options
context:
space:
mode:
authorChris Feng <chris.w.feng@gmail.com>2015-09-09T03·26+0800
committerChris Feng <chris.w.feng@gmail.com>2015-09-09T03·26+0800
commit5373c1df1a8432f6a54e8ded8c9a145842c067e2 (patch)
tree16bc7e1e40bcbe2b1f058514f1a6b10dd12d48d9 /exwm-layout.el
parenteafd031c556ecfe986c656ca72fcde7e06ac819a (diff)
Add support for xcb:Atom:_NET_CLIENT_LIST_STACKING etc
The _NET_CLIENT_LIST_STACKING EWMH property is essential for e.g. the tabbar of
chromium to work correctly.

* exwm-input.el: Remove invalid TODO item.
* exwm.el (exwm--init-icccm-ewmh): Add xcb:Atom:_NET_CLIENT_LIST and
  xcb:Atom:_NET_CLIENT_LIST_STACKING to _NET_SUPPORTED.
* exwm-layout.el (exwm-layout--refresh): Update _NET_CLIENT_LIST_STACKING.
* exwm-manage.el (exwm-manage--manage-window, exwm-manage--unmanage-window):
  Update _NET_CLIENT_LIST.
Diffstat (limited to 'exwm-layout.el')
-rw-r--r--exwm-layout.el15
1 files changed, 14 insertions, 1 deletions
diff --git a/exwm-layout.el b/exwm-layout.el
index a14651a46df9..ae1f48de8f86 100644
--- a/exwm-layout.el
+++ b/exwm-layout.el
@@ -239,7 +239,20 @@
         (with-current-buffer (window-buffer window)
           (when (and (eq major-mode 'exwm-mode)
                      (or exwm--floating-frame (not (eq frame exwm--frame))))
-            (set-window-buffer window placeholder)))))))
+            (set-window-buffer window placeholder))))
+      ;; Update _NET_CLIENT_LIST_STACKING
+      (xcb:+request exwm--connection
+          (make-instance 'xcb:ewmh:set-_NET_CLIENT_LIST_STACKING
+                         :window exwm--root
+                         :data (vconcat
+                                (delq nil
+                                      (mapcar
+                                       (lambda (buffer)
+                                         (with-current-buffer buffer
+                                           (when (eq major-mode 'exwm-mode)
+                                             exwm--id)))
+                                       (buffer-list))))))
+      (xcb:flush exwm--connection))))
 
 (defun exwm-layout--on-minibuffer-setup ()
   "Refresh layout when minibuffer grows."