# HG changeset patch # User Martin Rudalics # Date 1221294484 0 # Node ID 2f659932a2fbebb834ac33467fa807b9931059e7 # Parent c031cb3896391ce03b5cf2edb07091b690faea46 (select-frame-set-input-focus): With focus follows mouse move mouse cursor to right window. diff -r c031cb389639 -r 2f659932a2fb lisp/frame.el --- a/lisp/frame.el Fri Sep 12 16:59:57 2008 +0000 +++ b/lisp/frame.el Sat Sep 13 08:28:04 2008 +0000 @@ -842,13 +842,23 @@ (defun select-frame-set-input-focus (frame) "Select FRAME, raise it, and set input focus, if possible." - (select-frame frame) - (raise-frame frame) - ;; Ensure, if possible, that frame gets input focus. - (when (memq (window-system frame) '(x w32 ns)) - (x-focus-frame frame)) - (when focus-follows-mouse - (set-mouse-position (selected-frame) (1- (frame-width)) 0))) + (select-frame frame) + (raise-frame frame) + ;; Ensure, if possible, that frame gets input focus. + (when (memq (window-system frame) '(x w32 ns)) + (x-focus-frame frame)) + (when focus-follows-mouse + ;; When the mouse cursor is not in FRAME's selected window move it + ;; there to avoid that some other window gets selected when focus + ;; follows mouse. + (condition-case nil + (let ((window (frame-selected-window frame)) + (coordinates (cdr-safe (mouse-position)))) + (unless (and (car-safe coordinates) + (coordinates-in-window-p coordinates window)) + (let ((edges (window-inside-edges (frame-selected-window frame)))) + (set-mouse-position frame (nth 2 edges) (nth 1 edges))))) + (error nil)))) (defun other-frame (arg) "Select the ARGth different visible frame on current display, and raise it.