From 32b88f4bd0274e8ee1d4215ed52ee6d3c460c013 Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Thu, 22 Feb 2018 00:31:57 +0800 Subject: Mark active workspaces on each output * exwm-randr.el (exwm-randr--refresh): Mark active workspaces. * exwm-workspace.el (exwm-workspace-switch): Use the marks to show/hide X windows when switching workspace; do not update timestamp. (exwm-workspace-move-window): Use the marks to hide X windows after moving them. (exwm-workspace--init): Update `frameset-filter-alist'. --- exwm-randr.el | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'exwm-randr.el') diff --git a/exwm-randr.el b/exwm-randr.el index 39edb7b1b9be..c78a4ec812aa 100644 --- a/exwm-randr.el +++ b/exwm-randr.el @@ -89,7 +89,8 @@ the first one in result being the primary output." (defun exwm-randr--refresh () "Refresh workspaces according to the updated RandR info." - (let (output-name geometry output-plist primary-output default-geometry) + (let (output-name geometry output-plist primary-output default-geometry + container-output-alist container-frame-alist) ;; Query all outputs (with-slots (config-timestamp outputs) (xcb:+request-unchecked+reply exwm--connection @@ -126,12 +127,30 @@ the first one in result being the primary output." (dotimes (i (exwm-workspace--count)) (let* ((output (plist-get exwm-randr-workspace-output-plist i)) (geometry (lax-plist-get output-plist output)) - (frame (elt exwm-workspace--list i))) + (frame (elt exwm-workspace--list i)) + (container (frame-parameter frame 'exwm-container))) (unless geometry (setq geometry default-geometry output primary-output)) + (setq container-output-alist (nconc `((,container . ,output)) + container-output-alist) + container-frame-alist (nconc `((,container . ,frame)) + container-frame-alist)) (set-frame-parameter frame 'exwm-randr-output output) (set-frame-parameter frame 'exwm-geometry geometry))) + ;; Update the 'exwm-active' frame parameter. + (dolist (xwin + (reverse + (slot-value (xcb:+request-unchecked+reply exwm--connection + (make-instance 'xcb:QueryTree + :window exwm--root)) + 'children))) + (let ((output (cdr (assq xwin container-output-alist)))) + (when output + (setq container-output-alist + (rassq-delete-all output container-output-alist)) + (set-frame-parameter (cdr (assq xwin container-frame-alist)) + 'exwm-active t)))) ;; Update workareas. (exwm-workspace--update-workareas) ;; Resize workspace. -- cgit 1.4.1