]> git.eshelyaron.com Git - emacs.git/commitdiff
(mouse-autoselect-window-cancel): Don't cancel for
authorMartin Rudalics <rudalics@gmx.at>
Sat, 6 Oct 2007 10:19:45 +0000 (10:19 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Sat, 6 Oct 2007 10:19:45 +0000 (10:19 +0000)
select-window or select-frame events.
(handle-select-window): When autoselecting window set input
focus.  Restructure.

admin/FOR-RELEASE
lisp/ChangeLog
lisp/window.el

index dbc11ebdbf8d1cd7bda5e0632da47449af789568..7a26797ac87651afa9d5cdcd3f0f892702203ae6 100644 (file)
@@ -72,11 +72,6 @@ Stephen Berman <Stephen.Berman@gmx.net> has compiled a list of KDE
 builds where the behavior can be observed, compare:
 http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00446.html
 
-** mouse-autoselect-window with click-to-focus window managers
-Report by Drew Adams <drew.adams@oracle.com> on emacs-devel from
-2007-09-05.
-http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00298.html
-
 ** GNU NT-Emacs crashes with longlines-mode and outline-mode
 Reported by Rainer Thiel <r.thiel@uni-jena.de> on emacs-pretest-bug
 from 2007-09-22.
index 976caa1035605956a629cf043fc045df1bc57540..80d5f3f7e4374d181311adab61f17df24f98079c 100644 (file)
@@ -1,3 +1,13 @@
+2007-10-06  Martin Rudalics  <rudalics@gmx.at>
+
+       * window.el (mouse-autoselect-window-cancel): Don't cancel for
+       select-window or select-frame events.
+       (handle-select-window): When autoselecting window set input
+       focus.  Restructure.
+
+       * frame.el (focus-follows-mouse): Moved to frame.c.
+       * cus-start.el (all): Add focus-follows-mouse.
+
 2007-10-05  Chris Moore  <dooglus@gmail.com>
 
        * server.el (server-kill-new-buffers): Doc fix.
index 7a64588c076c85a033f0cfe55e439a89e6dcf95c..dd402750de4af8569f5447fb3fe47e03af730f07 100644 (file)
@@ -805,10 +805,13 @@ scrollbar interaction\) and `select' \(the next invocation of
   "Cancel delayed window autoselection.
 Optional argument FORCE means cancel unconditionally."
   (unless (and (not force)
-              ;; Don't cancel while the user drags a scroll bar.
-              (eq this-command 'scroll-bar-toolkit-scroll)
-              (memq (nth 4 (event-end last-input-event))
-                    '(handle end-scroll)))
+              ;; Don't cancel for select-window or select-frame events
+              ;; or when the user drags a scroll bar.
+              (or (memq this-command
+                        '(handle-select-window handle-switch-frame))
+                  (and (eq this-command 'scroll-bar-toolkit-scroll)
+                       (memq (nth 4 (event-end last-input-event))
+                             '(handle end-scroll)))))
     (setq mouse-autoselect-window-state nil)
     (when (timerp mouse-autoselect-window-timer)
       (cancel-timer mouse-autoselect-window-timer))
@@ -896,33 +899,39 @@ active.  This function is run by `mouse-autoselect-window-timer'."
   "Handle select-window events."
   (interactive "e")
   (let ((window (posn-window (event-start event))))
-    (when (and (window-live-p window)
-              ;; Don't switch if we're currently in the minibuffer.
-              ;; This tries to work around problems where the minibuffer gets
-              ;; unselected unexpectedly, and where you then have to move
-              ;; your mouse all the way down to the minibuffer to select it.
-              (not (window-minibuffer-p (selected-window)))
-              ;; Don't switch to a minibuffer window unless it's active.
-              (or (not (window-minibuffer-p window))
-                  (minibuffer-window-active-p window)))
-      (unless (and (numberp mouse-autoselect-window)
-                  (not (zerop mouse-autoselect-window))
-                  (not (eq mouse-autoselect-window-state 'select))
-                  (progn
-                    ;; Cancel any delayed autoselection.
-                    (mouse-autoselect-window-cancel t)
-                    ;; Start delayed autoselection from current mouse position
-                    ;; and window.
-                    (mouse-autoselect-window-start (mouse-position) window)
-                    ;; Executing a command cancels delayed autoselection.
-                    (add-hook
-                     'pre-command-hook 'mouse-autoselect-window-cancel)))
+    (unless (or (not (window-live-p window))
+               ;; Don't switch if we're currently in the minibuffer.
+               ;; This tries to work around problems where the
+               ;; minibuffer gets unselected unexpectedly, and where
+               ;; you then have to move your mouse all the way down to
+               ;; the minibuffer to select it.
+               (window-minibuffer-p (selected-window))
+               ;; Don't switch to minibuffer window unless it's active.
+               (and (window-minibuffer-p window)
+                    (not (minibuffer-window-active-p window)))
+               ;; Don't switch when autoselection shall be delayed.
+               (and (numberp mouse-autoselect-window)
+                    (not (zerop mouse-autoselect-window))
+                    (not (eq mouse-autoselect-window-state 'select))
+                    (progn
+                      ;; Cancel any delayed autoselection.
+                      (mouse-autoselect-window-cancel t)
+                      ;; Start delayed autoselection from current mouse position
+                      ;; and window.
+                      (mouse-autoselect-window-start (mouse-position) window)
+                      ;; Executing a command cancels delayed autoselection.
+                      (add-hook
+                       'pre-command-hook 'mouse-autoselect-window-cancel))))
+      (when mouse-autoselect-window
        ;; Reset state of delayed autoselection.
        (setq mouse-autoselect-window-state nil)
-       (when mouse-autoselect-window
-         ;; Run `mouse-leave-buffer-hook' when autoselecting window.
-         (run-hooks 'mouse-leave-buffer-hook))
-       (select-window window)))))
+       ;; Set input focus to handle cross-frame movement.  Bind
+       ;; `focus-follows-mouse' to avoid moving the mouse cursor.
+       (let (focus-follows-mouse)
+         (select-frame-set-input-focus (window-frame window)))
+       ;; Run `mouse-leave-buffer-hook' when autoselecting window.
+       (run-hooks 'mouse-leave-buffer-hook))
+      (select-window window))))
 
 (define-key ctl-x-map "2" 'split-window-vertically)
 (define-key ctl-x-map "3" 'split-window-horizontally)