Fix XTerm crash on startup
* exwm-input.el (exwm-input--set-focus): Applications like XTerm crashes on receiving WM_TAKE_FOCUS so only send it to X windows accepting it.
This commit is contained in:
parent
bc5f0b3ffa
commit
f45e9b9273
1 changed files with 12 additions and 10 deletions
|
@ -159,13 +159,14 @@ This value should always be overwritten.")
|
||||||
(when (exwm--id->buffer id)
|
(when (exwm--id->buffer id)
|
||||||
(with-current-buffer (exwm--id->buffer id)
|
(with-current-buffer (exwm--id->buffer id)
|
||||||
(exwm-input--update-timestamp
|
(exwm-input--update-timestamp
|
||||||
(lambda (timestamp id send-input-focus)
|
(lambda (timestamp id send-input-focus wm-take-focus)
|
||||||
(when send-input-focus
|
(when send-input-focus
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:SetInputFocus
|
(make-instance 'xcb:SetInputFocus
|
||||||
:revert-to xcb:InputFocus:Parent
|
:revert-to xcb:InputFocus:Parent
|
||||||
:focus id
|
:focus id
|
||||||
:time timestamp)))
|
:time timestamp)))
|
||||||
|
(when wm-take-focus
|
||||||
(let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
|
(let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
|
||||||
:window id
|
:window id
|
||||||
:time timestamp)))
|
:time timestamp)))
|
||||||
|
@ -173,12 +174,13 @@ This value should always be overwritten.")
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:icccm:SendEvent
|
(make-instance 'xcb:icccm:SendEvent
|
||||||
:destination id
|
:destination id
|
||||||
:event event)))
|
:event event))))
|
||||||
(exwm-input--set-active-window id)
|
(exwm-input--set-active-window id)
|
||||||
(xcb:flush exwm--connection))
|
(xcb:flush exwm--connection))
|
||||||
id
|
id
|
||||||
(or exwm--hints-input
|
(or exwm--hints-input
|
||||||
(not (memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols)))))))
|
(not (memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols)))
|
||||||
|
(memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols)))))
|
||||||
|
|
||||||
(defun exwm-input--update-timestamp (callback &rest args)
|
(defun exwm-input--update-timestamp (callback &rest args)
|
||||||
"Fetch the latest timestamp from the server and feed it to CALLBACK.
|
"Fetch the latest timestamp from the server and feed it to CALLBACK.
|
||||||
|
|
Loading…
Reference in a new issue