diff options
author | Adrián Medraño Calvo <adrian@medranocalvo.com> | 2021-12-09T00·00+0000 |
---|---|---|
committer | Adrián Medraño Calvo <adrian@medranocalvo.com> | 2021-12-09T00·00+0000 |
commit | a11bb099fbd0b755d9a6d80a63a0dcd275280e33 (patch) | |
tree | ac069f676b92e6ca26ad543e1e0c866e10e2558c /exwm-workspace.el | |
parent | 62ffde76aa3fa79c202d3c3f41cc995c716449d6 (diff) |
Refactor re-creation of last frame
* exwm-workspace.el (exwm-workspace--get-next-workspace): Return nil when there's only one frame. (exwm-workspace--on-delete-frame) (exwm-workspace--remove-frame-as-workspace): Create a workspace when removing the last one, for X windows to be moved to.
Diffstat (limited to 'exwm-workspace.el')
-rw-r--r-- | exwm-workspace.el | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/exwm-workspace.el b/exwm-workspace.el index dbb6e6c9fd8c..3bdbd472f4d2 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -1389,7 +1389,8 @@ Return nil if FRAME is the only workspace." (let* ((index (exwm-workspace--position frame)) (lastp (= index (1- (exwm-workspace--count)))) (nextw (elt exwm-workspace--list (+ index (if lastp -1 +1))))) - nextw)) + (unless (eq frame nextw) + nextw))) (defun exwm-workspace--remove-frame-as-workspace (frame) "Stop treating frame FRAME as a workspace." @@ -1401,6 +1402,11 @@ Return nil if FRAME is the only workspace." ;; Need to remove the workspace from the list for the correct calculation of ;; indexes below. (setq exwm-workspace--list (delete frame exwm-workspace--list)) + (unless next-frame + ;; The user managed to delete the last workspace, so create a new one. + (exwm--log "Last workspace deleted; create a new one") + (let ((exwm-workspace--create-silently t)) + (setq next-frame (make-frame)))) (dolist (pair exwm--id-buffer-alist) (let ((other-frame (buffer-local-value 'exwm--frame (cdr pair)))) ;; Move X windows to next-frame. @@ -1454,13 +1460,6 @@ Return nil if FRAME is the only workspace." ((not (exwm-workspace--workspace-p frame)) (exwm--log "Frame `%s' is not a workspace" frame)) (t - (when (= 1 (exwm-workspace--count)) - ;; The user managed to delete the last workspace, so create a new one. - (exwm--log "Last workspace deleted; create a new one") - ;; TODO: this makes sense in the hook. But we need a function that takes - ;; care of converting a workspace into a regular unmanaged frame. - (let ((exwm-workspace--create-silently t)) - (make-frame))) (exwm-workspace--remove-frame-as-workspace frame) (remhash frame exwm-workspace--client-p-hash-table)))) |