From 71a39840b239a51eed7455877517ebe612892eff Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Sun, 19 Nov 2017 14:51:45 +0800 Subject: Fix various input focus issues * exwm-input.el (exwm-input--on-buffer-list-update): Cancel the frame redirection introduced by 421c0512f7. * exwm-input.el (exwm-input--on-buffer-list-update): Only ignore temp buffers just switched from. * exwm-input.el (exwm-input--update-focus-commit): New function for ensuring the input focus lock can always be released. (exwm-input--update-focus-defer, exwm-input--update-focus): Use it. * exwm-input.el (exwm-input--update-focus): No need to select frames; only transfer X input focus. * exwm-core.el (exwm--defer): New macro for correcting the use of `run-with-idle-timer' by taking `current-idle-time' into account. * exwm-input.el (exwm-input--update-focus-defer) (exwm-input--update-focus): * exwm-layout.el (exwm-layout--on-minibuffer-setup) (exwm-layout--on-echo-area-change): * exwm-manage.el (exwm-manage--unmanage-window) (exwm-workspace--prompt-delete): * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace--add-frame-as-workspace): Use it. --- exwm-workspace.el | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'exwm-workspace.el') diff --git a/exwm-workspace.el b/exwm-workspace.el index bebd954940f2..d513172b66f5 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -145,7 +145,7 @@ Please manually run the hook `exwm-workspace-list-change-hook' afterwards.") (if (eq frame exwm-workspace--current) ;; Abort the recursive minibuffer if deleting the current workspace. (progn - (run-with-idle-timer 0 nil #'delete-frame frame) + (exwm--defer 0 #'delete-frame frame) (abort-recursive-edit)) (delete-frame frame) (exwm-workspace--update-switch-history) @@ -488,10 +488,10 @@ The optional FORCE option is for internal use only." (set-frame-parameter frame 'exwm-selected-window nil) ;; Close the (possible) active minibuffer (when (active-minibuffer-window) - (run-with-idle-timer 0 nil (lambda () - ;; Might be aborted by then. - (when (active-minibuffer-window) - (abort-recursive-edit))))) + (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) @@ -1275,8 +1275,7 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first." (make-instance 'xcb:MapWindow :window workspace))) (xcb:flush exwm--connection) ;; Delay making the workspace fullscreen until Emacs becomes idle - (run-with-idle-timer 0 nil #'set-frame-parameter - frame 'fullscreen 'fullboth) + (exwm--defer 0 #'set-frame-parameter frame 'fullscreen 'fullboth) ;; Update EWMH properties. (exwm-workspace--update-ewmh-props) (if exwm-workspace--create-silently -- cgit 1.4.1