summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorMartin Rudalics <rudalics@gmx.at>2008-11-27 13:20:15 +0000
committerMartin Rudalics <rudalics@gmx.at>2008-11-27 13:20:15 +0000
commita9d451f0346dbbbeb35f56e2581954a67d9faa50 (patch)
tree8ba629dc97f0b5da1ec9acbf213110f5778dc9cf /lisp/window.el
parent0956be4f1a9449bc6cce2097464e9027b0bfde6e (diff)
downloademacs-a9d451f0346dbbbeb35f56e2581954a67d9faa50.tar.gz
(display-buffer): Fix handling of not-this-window
argument. (Bug#1415)
Diffstat (limited to 'lisp/window.el')
-rw-r--r--lisp/window.el33
1 files changed, 25 insertions, 8 deletions
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)))))