emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm cddb342 1/4: Abort recursive edit before switching


From: Chris Feng
Subject: [elpa] externals/exwm cddb342 1/4: Abort recursive edit before switching workspaces
Date: Tue, 5 May 2020 10:16:34 -0400 (EDT)

branch: externals/exwm
commit cddb3429d2219ed5e15761e4b7b61be1a14970bd
Author: Adrián Medraño Calvo <address@hidden>
Commit: Adrián Medraño Calvo <address@hidden>

    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.
---
 exwm-workspace.el | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/exwm-workspace.el b/exwm-workspace.el
index 4da97d9..1f832a6 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -587,6 +587,16 @@ for internal use only."
     (when (or force (not (eq frame exwm-workspace--current)))
       (unless (window-live-p window)
         (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.
       (xcb:+request exwm--connection
           (make-instance 'xcb:ConfigureWindow
@@ -635,12 +645,6 @@ for internal use only."
       (select-window window)
       (x-focus-frame (window-frame window)) ;The real input focus.
       (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)
           ;; Resize the minibuffer frame.
           (exwm-workspace--resize-minibuffer-frame)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]