branch: externals/exwm commit cff02333e282c692aa685d57cc2b7c32419fffe2 Author: Nacho Barrientos <nacho.barrien...@cern.ch> Commit: Adrián Medraño Calvo <adr...@medranocalvo.com>
Don't assume that exwm--connection is non-nil `exwm-input--exit` could be called (via `exwm-exit`) from `exwm-init` in case of error when initialising EXWM. It could happen that the bit that failed when exwm-init is executed was the call to `xcb:connect`, hence `exwm--connection` would be nil when errors are handled (and `exwm-exit` is called). Without this patch, in the case above, the user will see a crash as there's no method allowing a nil XCB connection object: Debugger entered--Lisp error: (cl-no-applicable-method xcb:-+request nil #<xcb:SetInputFocus ... even worse, not even giving the chance to the `warn` call in `exwm-init`'s error handler to actually inform the user about the actual problem ("[XELB] Connection timeout", for instance). * exwm-input.el (exwm-input--exit): Check `exwm--connection' is set before trying to send requests. --- exwm-input.el | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/exwm-input.el b/exwm-input.el index 79bc78ef0f..2c65116aa3 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -1215,12 +1215,13 @@ One use is to access the keymap bound to KEYS (as prefix keys) in char-mode." (when exwm-input--update-focus-timer (cancel-timer exwm-input--update-focus-timer)) ;; Make input focus working even without a WM. - (xcb:+request exwm--connection - (make-instance 'xcb:SetInputFocus - :revert-to xcb:InputFocus:PointerRoot - :focus exwm--root - :time xcb:Time:CurrentTime)) - (xcb:flush exwm--connection)) + (when exwm--connection + (xcb:+request exwm--connection + (make-instance 'xcb:SetInputFocus + :revert-to xcb:InputFocus:PointerRoot + :focus exwm--root + :time xcb:Time:CurrentTime)) + (xcb:flush exwm--connection)))