From 2ebeec12570636e673d08c8b4d47e12ce0da048b Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Tue, 19 Jul 2016 10:34:38 +0800 Subject: [PATCH] Adapt dynamic workspace for RandR module * exwm-workspace.el (exwm-workspace-list-change-hook): New hook run when the workspace list is modified. * exwm-randr.el (exwm-randr--init, exwm-randr--exit): * exwm-workspace.el (exwm-workspace-swap, exwm-workspace-move) (exwm-workspace--add-frame-as-workspace) (exwm-workspace--remove-frame-as-workspace): Use it. --- exwm-randr.el | 6 ++++-- exwm-workspace.el | 15 +++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/exwm-randr.el b/exwm-randr.el index ac3341d..709469a 100644 --- a/exwm-randr.el +++ b/exwm-randr.el @@ -154,10 +154,12 @@ ;; xcb:randr:NotifyMask:OutputProperty ;; xcb:randr:NotifyMask:CrtcChange)) )) - (xcb:flush exwm--connection))))) + (xcb:flush exwm--connection) + (add-hook 'exwm-workspace-list-change-hook #'exwm-randr--refresh))))) (defun exwm-randr--exit () - "Exit the RandR module.") + "Exit the RandR module." + (remove-hook 'exwm-workspace-list-change-hook #'exwm-randr--refresh)) (defun exwm-randr-enable () "Enable RandR support for EXWM." diff --git a/exwm-workspace.el b/exwm-workspace.el index 36502a2..d575058 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -449,6 +449,9 @@ The optional FORCE option is for internal use only." (xcb:flush exwm--connection)) (run-hooks 'exwm-workspace-switch-hook))) +(defvar exwm-workspace-list-change-hook nil + "Normal hook run when the workspace list is changed (workspace added, +deleted, moved, etc).") ;;;###autoload (defun exwm-workspace-swap (workspace1 workspace2) @@ -476,7 +479,8 @@ The optional FORCE option is for internal use only." ;; With the current workspace involved, lots of stuffs need refresh. (set-frame-parameter exwm-workspace--current 'exwm-selected-window (selected-window)) - (exwm-workspace-switch exwm-workspace--current t))))) + (exwm-workspace-switch exwm-workspace--current t)) + (run-hooks 'exwm-workspace-list-change-hook)))) ;;;###autoload (defun exwm-workspace-move (workspace nth) @@ -511,7 +515,8 @@ before it." ;; With the current workspace involved, lots of stuffs need refresh. (set-frame-parameter exwm-workspace--current 'exwm-selected-window (selected-window)) - (exwm-workspace-switch exwm-workspace--current t))))) + (exwm-workspace-switch exwm-workspace--current t)) + (run-hooks 'exwm-workspace-list-change-hook)))) ;;;###autoload (defun exwm-workspace-add (&optional index) @@ -1055,7 +1060,8 @@ INDEX must not exceed the current number of workspaces." 'fullscreen 'fullboth))) ;; Update EWMH properties. (exwm-workspace--update-ewmh-props) - (exwm-workspace-switch frame t)))) + (exwm-workspace-switch frame t) + (run-hooks 'exwm-workspace-list-change-hook)))) (defun exwm-workspace--remove-frame-as-workspace (frame) "Stop treating frame FRAME as a workspace." @@ -1096,7 +1102,8 @@ INDEX must not exceed the current number of workspaces." ;; Update EWMH properties. (exwm-workspace--update-ewmh-props) ;; Update switch history. - (setq exwm-workspace--switch-history-outdated t)))) + (setq exwm-workspace--switch-history-outdated t) + (run-hooks 'exwm-workspace-list-change-hook)))) (defun exwm-workspace--update-ewmh-props () "Update EWMH properties to match the workspace list."