Fix unexpected focus change after a global key binding is activated

* exwm-core.el (exwm--unlock): Select FocusChange events on the root
window.

* exwm-input.el (exwm-input--on-FocusIn): Input focus should stay on
the current workspace when the root window receives a FocusIn event.
This commit is contained in:
Chris Feng 2018-02-20 22:21:02 +08:00
parent c821f76dfe
commit 86f2215be3
2 changed files with 5 additions and 5 deletions

View file

@ -93,7 +93,8 @@
:window exwm--root :window exwm--root
:value-mask xcb:CW:EventMask :value-mask xcb:CW:EventMask
:event-mask (eval-when-compile :event-mask (eval-when-compile
(logior xcb:EventMask:SubstructureRedirect (logior xcb:EventMask:FocusChange
xcb:EventMask:SubstructureRedirect
xcb:EventMask:StructureNotify)))) xcb:EventMask:StructureNotify))))
(xcb:flush exwm--connection)) (xcb:flush exwm--connection))

View file

@ -218,10 +218,9 @@ ARGS are additional arguments to CALLBACK."
(xcb:unmarshal obj data) (xcb:unmarshal obj data)
(with-slots (mode) obj (with-slots (mode) obj
;; Revert input focus back to Emacs frame / X window when it's set on ;; Revert input focus back to Emacs frame / X window when it's set on
;; the root window or some workspace container. ;; the root window.
(when (eq mode xcb:NotifyMode:Normal) (x-focus-frame exwm-workspace--current)
(x-focus-frame (selected-frame)) (select-window (frame-selected-window exwm-workspace--current)))))
(select-window (selected-window))))))
(defun exwm-input--on-EnterNotify (data _synthetic) (defun exwm-input--on-EnterNotify (data _synthetic)
"Handle EnterNotify events." "Handle EnterNotify events."