changeset 99987:a02dc0440746

(display-buffer): Fix handling of not-this-window argument. (Bug#1415)
author Martin Rudalics <rudalics@gmx.at>
date Thu, 27 Nov 2008 13:19:36 +0000
parents 821cd83f08ea
children d82e6f4a6d13
files lisp/window.el
diffstat 1 files changed, 25 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/window.el	Thu Nov 27 09:14:14 2008 +0000
+++ b/lisp/window.el	Thu Nov 27 13:19:36 2008 +0000
@@ -1038,14 +1038,31 @@
 		     (window--try-to-split-window
 		      (get-lru-window frame-to-use t))))
 	   (window--display-buffer-2 buffer window-to-use)))
-     ((setq window-to-use
-	    ;; Reuse an existing window.
-	    (or (get-lru-window frame-to-use)
-		(get-buffer-window buffer 'visible)
-		(get-largest-window 'visible nil)
-		(get-buffer-window buffer 0)
-		(get-largest-window 0 nil)
-		(frame-selected-window (funcall pop-up-frame-function))))
+     ((let ((window-to-undedicate
+	     ;; When NOT-THIS-WINDOW is non-nil, temporarily dedicate
+	     ;; the selected window to its buffer, to avoid that some of
+	     ;; the `get-' routines below choose it.  (Bug#1415)
+	     (and not-this-window (not (window-dedicated-p))
+		  (set-window-dedicated-p (selected-window) t)
+		  (selected-window))))
+	(unwind-protect
+	    (setq window-to-use
+		  ;; Reuse an existing window.
+		  (or (get-lru-window frame-to-use)
+		      (let ((window (get-buffer-window buffer 'visible)))
+			(unless (and not-this-window
+				     (eq window (selected-window)))
+			  window))
+		      (get-largest-window 'visible)
+		      (let ((window (get-buffer-window buffer 0)))
+			(unless (and not-this-window
+				     (eq window (selected-window)))
+			  window))
+		      (get-largest-window 0)
+		      (frame-selected-window (funcall pop-up-frame-function))))
+	  (when (window-live-p window-to-undedicate)
+	    ;; Restore dedicated status of selected window.
+	    (set-window-dedicated-p window-to-undedicate nil))))
       (window--even-window-heights window-to-use)
       (window--display-buffer-2 buffer window-to-use)))))