GNU bug report logs -
#36165
27.0.50; `select-frame-set-input-focus' moves mouse pointer outside of frame
Previous Next
Reported by: Pip Cet <pipcet <at> gmail.com>
Date: Tue, 11 Jun 2019 07:24:02 UTC
Severity: normal
Found in version 27.0.50
Done: Pip Cet <pipcet <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
In emacs -Q, disable scroll-bar-mode and evaluate:
(let ((mouse-autoselect-window t))
(select-frame-set-input-focus (window-frame)))
The mouse pointer will now be to the right of the window frame; with
normal window managers, this doesn't matter much, except that a "resize
this window" cursor might be shown rather than the usual one, but with
tiling window managers, the cursor position may correspond to another
window, which is then raised and wrongly receives keyboard focus. This
actually happened to me.
The attached patch fixes things, by moving the mouse pointer to the last
valid x position.
diff --git a/lisp/frame.el b/lisp/frame.el
index a8c230cb7b..7b61003c9a 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -979,10 +979,11 @@ select-frame-set-input-focus
;; Move mouse cursor if necessary.
(cond
(mouse-autoselect-window
- (let ((edges (window-inside-edges (frame-selected-window frame))))
+ (let ((edges (window-edges (frame-selected-window frame)
+ t nil t)))
;; Move mouse cursor into FRAME's selected window to avoid that
;; Emacs mouse-autoselects another window.
- (set-mouse-position frame (nth 2 edges) (nth 1 edges))))
+ (set-mouse-pixel-position frame (1- (nth 2 edges)) (nth 1 edges))))
(focus-follows-mouse
;; Move mouse cursor into FRAME to avoid that another frame gets
;; selected by the window manager.
[emacs-patch-2.diff (text/x-patch, attachment)]
This bug report was last modified 5 years and 348 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.