From: Martin Rudalics Date: Tue, 16 Sep 2008 08:20:21 +0000 (+0000) Subject: (select-frame-set-input-focus): With non-nil X-Git-Tag: emacs-pretest-23.0.90~2883 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bbca16d8d14cd70b45dffeea59a17033ed4df8b4;p=emacs.git (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. --- diff --git a/lisp/frame.el b/lisp/frame.el index 8acafa9c690..cbf4c9f1372 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -841,24 +841,26 @@ the user during startup." (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 @@ If there is no frame by that name, signal an error." (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