Support displaying floating X windows on all workspaces

; Setting _NET_WM_DESKTOP to 0xffffffff makes an X windows appearing
; on all desktops (EWMH).  It's tricky to do it for tiling X windows
; so it's not implemented.

* exwm-core.el (exwm--desktop): New buffer-local variable recording
the value of _NET_WM_DESKTOP.
* exwm-layout.el (exwm-layout--hide): Do not hide X windows with this
property set to 0xffffffff.

* exwm.el (exwm--update-desktop): New function for fetching the value
of _NET_WM_DESKTOP and setting `exwm--desktop'.
* exwm-manage.el (exwm-manage--manage-window): Use it.

* exwm-workspace.el (exwm-workspace--set-desktop): Also update
`exwm--desktop'.
This commit is contained in:
Chris Feng 2018-02-19 22:34:03 +08:00
parent d22e6740d7
commit b8ce20b4f3
5 changed files with 38 additions and 18 deletions

View file

@ -685,10 +685,12 @@ INDEX must not exceed the current number of workspaces."
(defun exwm-workspace--set-desktop (id)
"Set _NET_WM_DESKTOP for X window ID."
(with-current-buffer (exwm--id->buffer id)
(xcb:+request exwm--connection
(make-instance 'xcb:ewmh:set-_NET_WM_DESKTOP
:window id
:data (exwm-workspace--position exwm--frame)))))
(let ((desktop (exwm-workspace--position exwm--frame)))
(setq exwm--desktop desktop)
(xcb:+request exwm--connection
(make-instance 'xcb:ewmh:set-_NET_WM_DESKTOP
:window id
:data desktop)))))
;;;###autoload
(defun exwm-workspace-move-window (frame-or-index &optional id)