Fix input focus transfer between workspaces

* exwm-input.el (exwm-input--set-focus): Make input focus revert to
parent by default (to prevent input focus from following pointer).

* exwm-input.el (exwm-input--update-focus): Switch to another workspace
if input focus is transfered to it.
* exwm-workspace.el (exwm-workspace--on-focus-in, exwm-workspace--init)
(exwm-workspace--exit): Remove `exwm-workspace--on-focus-in' and related
uses.
This commit is contained in:
Chris Feng 2016-07-30 10:00:11 +08:00
parent f52848595d
commit 6bfedf8bf7
2 changed files with 10 additions and 17 deletions

View file

@ -73,7 +73,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(exwm--log "Focus on #x%x with SetInputFocus" id)
(xcb:+request exwm--connection
(make-instance 'xcb:SetInputFocus
:revert-to xcb:InputFocus:PointerRoot
:revert-to xcb:InputFocus:Parent
:focus id
:time xcb:Time:CurrentTime)))
(exwm-input--set-active-window id)
@ -169,9 +169,15 @@ This value should always be overwritten.")
(xcb:flush exwm--connection)))
(when (eq (selected-window) window)
(exwm--log "Focus on %s" window)
(select-frame-set-input-focus (window-frame window) t)
(exwm-input--set-active-window)
(xcb:flush exwm--connection)))))
(if (and (exwm-workspace--workspace-p (selected-frame))
(not (eq (selected-frame) exwm-workspace--current)))
;; The focus is on another workspace (e.g. it got clicked)
;; so switch to it.
(exwm-workspace-switch (selected-frame))
;; The focus is still on the current workspace.
(select-frame-set-input-focus (window-frame window) t)
(exwm-input--set-active-window)
(xcb:flush exwm--connection))))))
(setq exwm-input--update-focus-lock nil))
(defun exwm-input--on-minibuffer-setup ()