diff options
author | Nacho Barrientos <nacho.barrientos@cern.ch> | 2023-05-07T10·45+0200 |
---|---|---|
committer | Adrián Medraño Calvo <adrian@medranocalvo.com> | 2023-06-09T00·00+0000 |
commit | cff02333e282c692aa685d57cc2b7c32419fffe2 (patch) | |
tree | e7600b2a8bbb012e917a333dcba7c78844ac4c0a /exwm-input.el | |
parent | b62d5e79b0c1799f2cd941b4cec5bf8492cb322c (diff) |
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.
Diffstat (limited to 'exwm-input.el')
-rw-r--r-- | exwm-input.el | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/exwm-input.el b/exwm-input.el index 79bc78ef0fe9..2c65116aa33c 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))) |