From a9d451f0346dbbbeb35f56e2581954a67d9faa50 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Thu, 27 Nov 2008 13:20:15 +0000 Subject: [PATCH] (display-buffer): Fix handling of not-this-window argument. (Bug#1415) --- lisp/ChangeLog | 5 +++++ lisp/window.el | 33 +++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 8 deletions(-) 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))))) -- 2.39.2