Abort recursive edit before switching workspaces

* exwm-workspace.el (exwm-workspace-switch): Abort recursive edit
	before switching to other workspace.  This avoids the usual
	`set-window-configuration' calls (e.g., by `eval-expression') to
	switch *us back to the previous workspace.
This commit is contained in:
Adrián Medraño Calvo 2020-04-15 00:00:00 +00:00
parent 95d6aa96cf
commit cddb3429d2

View file

@ -587,6 +587,16 @@ for internal use only."
(when (or force (not (eq frame exwm-workspace--current))) (when (or force (not (eq frame exwm-workspace--current)))
(unless (window-live-p window) (unless (window-live-p window)
(setq window (frame-selected-window frame))) (setq window (frame-selected-window frame)))
;; Close the (possible) active minibuffer. Aborting the recursive edit
;; level will abort the execution of this very command. Schedule it to
;; run immediately afterward. This must all be done before the new
;; workspace is selected in the new workspace, in order to avoid the focus
;; to go back to the previous frame due to resetting the window
;; configuration (e.g. `eval-expression').
(when (active-minibuffer-window)
(exwm--defer 0 (lambda ()
(exwm-workspace-switch frame-or-index force)))
(abort-recursive-edit))
;; Raise this frame. ;; Raise this frame.
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:ConfigureWindow (make-instance 'xcb:ConfigureWindow
@ -635,12 +645,6 @@ for internal use only."
(select-window window) (select-window window)
(x-focus-frame (window-frame window)) ;The real input focus. (x-focus-frame (window-frame window)) ;The real input focus.
(set-frame-parameter frame 'exwm-selected-window nil) (set-frame-parameter frame 'exwm-selected-window nil)
;; Close the (possible) active minibuffer
(when (active-minibuffer-window)
(exwm--defer 0 (lambda ()
;; Might be aborted by then.
(when (active-minibuffer-window)
(abort-recursive-edit)))))
(if (exwm-workspace--minibuffer-own-frame-p) (if (exwm-workspace--minibuffer-own-frame-p)
;; Resize the minibuffer frame. ;; Resize the minibuffer frame.
(exwm-workspace--resize-minibuffer-frame) (exwm-workspace--resize-minibuffer-frame)