(select-frame-set-input-focus): With focus follows
authorMartin Rudalics <rudalics@gmx.at>
Sat, 13 Sep 2008 08:28:04 +0000 (08:28 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Sat, 13 Sep 2008 08:28:04 +0000 (08:28 +0000)
mouse move mouse cursor to right window.

lisp/frame.el

index 5454ac8..8acafa9 100644 (file)
@@ -842,13 +842,23 @@ the user during startup."
 
 (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.