# HG changeset patch # User Martin Rudalics # Date 1227791976 0 # Node ID a02dc0440746be83e8a0d3197a292ea33b304e0e # Parent 821cd83f08eabbf3775972fad84b6dabce2d85e8 (display-buffer): Fix handling of not-this-window argument. (Bug#1415) diff -r 821cd83f08ea -r a02dc0440746 lisp/window.el --- 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)))))