diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2018-02-19T14·34+0800 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2018-02-19T14·34+0800 |
commit | b8ce20b4f3eac1228aef58b83a72a87ccdb819d0 (patch) | |
tree | d4d412e76032258104255e0cdce84b2b5d540acb /exwm.el | |
parent | d22e6740d761bd2c67e928579502a6c2816516a9 (diff) |
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'.
Diffstat (limited to 'exwm.el')
-rw-r--r-- | exwm.el | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/exwm.el b/exwm.el index 3e445b21eec7..5cba3785f23e 100644 --- a/exwm.el +++ b/exwm.el @@ -145,6 +145,32 @@ (while (= ?R (shell-command-on-region (point) (point) args)))) (kill-emacs)))))) +(defun exwm--update-desktop (xwin) + "Update _NET_WM_DESKTOP." + (with-current-buffer (exwm--id->buffer xwin) + (let ((reply (xcb:+request-unchecked+reply exwm--connection + (make-instance 'xcb:ewmh:get-_NET_WM_DESKTOP + :window xwin))) + desktop) + (when reply + (setq desktop (slot-value reply 'value)) + (cond + ((eq desktop #xffffffff) + (unless (or (not exwm--floating-frame) + (eq exwm--frame exwm-workspace--current) + (and exwm--desktop + (= desktop exwm--desktop))) + (exwm-layout--show xwin (frame-root-window exwm--floating-frame))) + (setq exwm--desktop desktop)) + ((and desktop + (< desktop (exwm-workspace--count)) + (if exwm--desktop + (/= desktop exwm--desktop) + (/= desktop (exwm-workspace--position exwm--frame)))) + (exwm-workspace-move-window desktop xwin)) + (t + (exwm-workspace--set-desktop xwin))))))) + (defun exwm--update-window-type (id &optional force) "Update _NET_WM_WINDOW_TYPE." (with-current-buffer (exwm--id->buffer id) |