Only check input focus for globally active model
* exwm-input.el (exwm-input--set-focus): Partly revert 810b471
.
This commit is contained in:
parent
108b3949c2
commit
fe653ba244
1 changed files with 30 additions and 31 deletions
|
@ -61,38 +61,37 @@
|
|||
(defun exwm-input--set-focus (id)
|
||||
"Set input focus to window ID in a proper way."
|
||||
(when (exwm--id->buffer id)
|
||||
(let ((focus (slot-value (xcb:+request-unchecked+reply exwm--connection
|
||||
(with-current-buffer (exwm--id->buffer id)
|
||||
(cond
|
||||
((and (not exwm--hints-input)
|
||||
(memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols))
|
||||
(when (= (frame-parameter nil 'exwm-id)
|
||||
(slot-value (xcb:+request-unchecked+reply exwm--connection
|
||||
(make-instance 'xcb:GetInputFocus))
|
||||
'focus)))
|
||||
(unless (= focus id)
|
||||
(with-current-buffer (exwm--id->buffer id)
|
||||
(cond
|
||||
((and (not exwm--hints-input)
|
||||
(memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols))
|
||||
(when (= focus (frame-parameter nil 'exwm-id))
|
||||
(exwm--log "Focus on #x%x with WM_TAKE_FOCUS" id)
|
||||
(exwm-input--update-timestamp
|
||||
(lambda (timestamp id)
|
||||
(let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
|
||||
:window id
|
||||
:time timestamp)))
|
||||
(setq event (xcb:marshal event exwm--connection))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:icccm:SendEvent
|
||||
:destination id
|
||||
:event event))
|
||||
(exwm-input--set-active-window id)
|
||||
(xcb:flush exwm--connection)))
|
||||
id)))
|
||||
(t
|
||||
(exwm--log "Focus on #x%x with SetInputFocus" id)
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:SetInputFocus
|
||||
:revert-to xcb:InputFocus:Parent
|
||||
:focus id
|
||||
:time xcb:Time:CurrentTime))
|
||||
(exwm-input--set-active-window id)
|
||||
(xcb:flush exwm--connection))))))))
|
||||
'focus))
|
||||
(exwm--log "Focus on #x%x with WM_TAKE_FOCUS" id)
|
||||
(exwm-input--update-timestamp
|
||||
(lambda (timestamp id)
|
||||
(let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
|
||||
:window id
|
||||
:time timestamp)))
|
||||
(setq event (xcb:marshal event exwm--connection))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:icccm:SendEvent
|
||||
:destination id
|
||||
:event event))
|
||||
(exwm-input--set-active-window id)
|
||||
(xcb:flush exwm--connection)))
|
||||
id)))
|
||||
(t
|
||||
(exwm--log "Focus on #x%x with SetInputFocus" id)
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:SetInputFocus
|
||||
:revert-to xcb:InputFocus:Parent
|
||||
:focus id
|
||||
:time xcb:Time:CurrentTime))
|
||||
(exwm-input--set-active-window id)
|
||||
(xcb:flush exwm--connection))))))
|
||||
|
||||
(defun exwm-input--update-timestamp (callback &rest args)
|
||||
"Fetch the latest timestamp from the server and feed it to CALLBACK.
|
||||
|
|
Loading…
Reference in a new issue