From: Martin Rudalics Date: Thu, 27 Nov 2008 13:20:15 +0000 (+0000) Subject: (display-buffer): Fix handling of not-this-window X-Git-Tag: emacs-pretest-23.0.90~1474 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a9d451f0346dbbbeb35f56e2581954a67d9faa50;p=emacs.git (display-buffer): Fix handling of not-this-window argument. (Bug#1415) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 774c3c62606..a9779c010f8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2008-11-27 Martin Rudalics + + * window.el (display-buffer): Fix handling of not-this-window + argument. (Bug#1415) + 2008-11-27 Kenichi Handa * international/characters.el: Set category 'C' to characters diff --git a/lisp/window.el b/lisp/window.el index 02af7bd6c54..6373185ffaa 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1038,14 +1038,31 @@ consider all visible or iconified frames." (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)))))