about summary refs log tree commit diff
path: root/exwm-input.el
diff options
context:
space:
mode:
authorNacho Barrientos <nacho.barrientos@cern.ch>2023-05-07T10·45+0200
committerAdrián Medraño Calvo <adrian@medranocalvo.com>2023-06-09T00·00+0000
commitcff02333e282c692aa685d57cc2b7c32419fffe2 (patch)
treee7600b2a8bbb012e917a333dcba7c78844ac4c0a /exwm-input.el
parentb62d5e79b0c1799f2cd941b4cec5bf8492cb322c (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.el13
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)))