From 46461d994b32da1813d3e531b02127c7b9281947 Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Sun, 11 Oct 2015 11:39:10 +0800 Subject: [PATCH] Improve robustness * exwm-input.el (exwm-input--update-focus, exwm-input--on-ButtonPress): Make sure Emacs windows are alive before manipulating them. --- exwm-input.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/exwm-input.el b/exwm-input.el index 9def8ca..6c34853 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -111,7 +111,9 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") (defun exwm-input--update-focus () "Update input focus." - (when exwm-input--focus-window + (when (and exwm-input--focus-window + ;; The Emacs window may have been deleted + (window-buffer exwm-input--focus-window)) (with-current-buffer (window-buffer exwm-input--focus-window) (if (eq major-mode 'exwm-mode) (if (not (eq exwm--frame exwm-workspace--current)) @@ -203,7 +205,12 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") ;; The floating X window is on another workspace (exwm-workspace-switch (cl-position exwm--frame exwm-workspace--list)))))) - (select-window window))) + ;; It has been reported that the `window' may have be deleted + (if (window-live-p window) + (select-window window) + (setq window + (get-buffer-window (exwm--id->buffer event) t)) + (when window (select-window window))))) ;; The event should be replayed (setq mode xcb:Allow:ReplayPointer)))) (xcb:+request exwm--connection