From f685de12d464b334ba7efdfe67e989dd63a96fa0 Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Fri, 25 Sep 2015 13:45:30 +0800 Subject: [PATCH] Fix click-to-focus on multi-monitor settings * exwm-input.el (exwm-input--on-ButtonPress): [click-to-focus] Switch to the corresponding workspace if necessary. --- exwm-input.el | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/exwm-input.el b/exwm-input.el index 9645182d0..9def8ca56 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -187,8 +187,22 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") (exwm-floating--start-moveresize event)) (t ;; Click to focus - (let ((window (get-buffer-window (exwm--id->buffer event) t))) + (let ((window (get-buffer-window (exwm--id->buffer event) t)) + frame) (unless (eq window (selected-window)) + (setq frame (window-frame window)) + (unless (eq frame exwm-workspace--current) + (if (memq frame exwm-workspace--list) + ;; The X window is on another workspace + (exwm-workspace-switch + (cl-position frame exwm-workspace--list)) + (with-current-buffer (window-buffer window) + (when (and (eq major-mode 'exwm-mode) + (not (eq exwm--frame + exwm-workspace--current))) + ;; The floating X window is on another workspace + (exwm-workspace-switch + (cl-position exwm--frame exwm-workspace--list)))))) (select-window window))) ;; The event should be replayed (setq mode xcb:Allow:ReplayPointer))))