changeset 98194:6cf707f7e962

(select-frame-set-input-focus): With non-nil mouse-autoselect-window always move mouse cursor to frame's selected window. Otherwise restore pre 2008-09-13 behavior. (select-frame-by-name): Use select-frame-set-input-focus.
author Martin Rudalics <rudalics@gmx.at>
date Tue, 16 Sep 2008 08:20:21 +0000
parents 85915b708993
children b137280b6fc9
files lisp/frame.el
diffstat 1 files changed, 19 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/frame.el	Tue Sep 16 02:45:51 2008 +0000
+++ b/lisp/frame.el	Tue Sep 16 08:20:21 2008 +0000
@@ -841,24 +841,26 @@
 (declare-function x-focus-frame "xfns.c" (frame))
 
 (defun select-frame-set-input-focus (frame)
-  "Select FRAME, raise it, and set input focus, if possible."
+  "Select FRAME, raise it, and set input focus, if possible.
+If `mouse-autoselect-window' is non-nil, also move mouse cursor
+to FRAME's selected window.  Otherwise, if `focus-follows-mouse'
+is non-nil, move mouse cursor to FRAME."
   (select-frame frame)
   (raise-frame frame)
-  ;; Ensure, if possible, that frame gets input focus.
+  ;; 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))))
+  ;; Move mouse cursor if necessary.
+  (cond
+   (mouse-autoselect-window
+    (let ((edges (window-inside-edges (frame-selected-window frame))))
+      ;; 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))))
+   (focus-follows-mouse
+    ;; Move mouse cursor into FRAME to avoid that another frame gets
+    ;; selected by the window manager.
+    (set-mouse-position frame (1- (frame-width frame)) 0))))
 
 (defun other-frame (arg)
   "Select the ARGth different visible frame on current display, and raise it.
@@ -934,16 +936,9 @@
        (list input))))
   (let* ((frame-names-alist (make-frame-names-alist))
 	 (frame (cdr (assoc name frame-names-alist))))
-    (or frame
-	(error "There is no frame named `%s'" name))
-    (make-frame-visible frame)
-    (raise-frame frame)
-    (select-frame frame)
-    ;; Ensure, if possible, that frame gets input focus.
-    (cond ((memq (window-system frame) '(x w32 ns))
-	   (x-focus-frame frame)))
-    (when focus-follows-mouse
-      (set-mouse-position frame (1- (frame-width frame)) 0))))
+    (if frame
+	(select-frame-set-input-focus frame)
+      (error "There is no frame named `%s'" name))))
 
 ;;;; Frame configurations