diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2018-12-16T00·00+0000 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2018-12-16T00·00+0000 |
commit | 2efd7495d9755e12a611dbf27dac6057287cd590 (patch) | |
tree | bbff92c47bc9d25ac71b943a6d065ab07b1ce9de | |
parent | e6892216a6851307c822a71841ad2dc986facb77 (diff) |
Avoid unnecessary focus changes when creating/killing buffers
* exwm-input.el (exwm-input--skip-buffer-list-update): New internal variable for skipping the next 'buffer-list-update'. (exwm-input--on-buffer-list-update): Skip when `exwm-input--skip-buffer-list-update` is set. * exwm-manage.el (exwm-manage--manage-window): Set `exwm-input--skip-buffer-list-update` when creating/killing buffers.
-rw-r--r-- | exwm-input.el | 4 | ||||
-rw-r--r-- | exwm-manage.el | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/exwm-input.el b/exwm-input.el index b7b55d88f781..39fcbadec8b5 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -117,6 +117,9 @@ defined in `exwm-mode-map' here." (defvar exwm-input--simulation-keys nil "Simulation keys in line-mode.") +(defvar exwm-input--skip-buffer-list-update nil + "Skip the upcoming 'buffer-list-update'.") + (defvar exwm-input--temp-line-mode nil "Non-nil indicates it's in temporary line-mode for char-mode.") @@ -264,6 +267,7 @@ ARGS are additional arguments to CALLBACK." (defun exwm-input--on-buffer-list-update () "Run in `buffer-list-update-hook' to track input focus." (when (and (not (eq this-command #'handle-switch-frame)) + (not exwm-input--skip-buffer-list-update) (not (exwm-workspace--client-p)) ;; The following conditions filter out events relating to temp ;; buffers. diff --git a/exwm-manage.el b/exwm-manage.el index 7000c53a6f55..6bb26f228d20 100644 --- a/exwm-manage.el +++ b/exwm-manage.el @@ -91,6 +91,7 @@ You can still make the X windows floating afterwards." (defvar exwm-manage--ping-lock nil "Non-nil indicates EXWM is pinging a window.") +(defvar exwm-input--skip-buffer-list-update) (defvar exwm-input-prefix-keys) (defvar exwm-workspace--current) (defvar exwm-workspace--id-struts-alist) @@ -201,7 +202,8 @@ You can still make the X windows floating afterwards." (make-instance 'xcb:ChangeSaveSet :mode xcb:SetMode:Insert :window id)) - (with-current-buffer (generate-new-buffer "*EXWM*") + (with-current-buffer (let ((exwm-input--skip-buffer-list-update t)) + (generate-new-buffer "*EXWM*")) ;; Keep the oldest X window first. (setq exwm--id-buffer-alist (nconc exwm--id-buffer-alist `((,id . ,(current-buffer))))) @@ -284,7 +286,8 @@ You can still make the X windows floating afterwards." :stack-mode xcb:StackMode:Below))) (xcb:flush exwm--connection) (setq exwm--id-buffer-alist (assq-delete-all id exwm--id-buffer-alist)) - (let ((kill-buffer-query-functions nil)) + (let ((kill-buffer-query-functions nil) + (exwm-input--skip-buffer-list-update t)) (kill-buffer (current-buffer))) (throw 'return 'ignored)) (let ((index (plist-get exwm--configurations 'workspace))) |