emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp window.el


From: Martin Rudalics
Subject: [Emacs-diffs] emacs/lisp window.el
Date: Thu, 27 Nov 2008 13:19:37 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Martin Rudalics <m061211>       08/11/27 13:19:37

Modified files:
        lisp           : window.el 

Log message:
        (display-buffer): Fix handling of not-this-window
        argument.  (Bug#1415)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/window.el?cvsroot=emacs&r1=1.168&r2=1.169

Patches:
Index: window.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/window.el,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -b -r1.168 -r1.169
--- window.el   18 Nov 2008 20:45:27 -0000      1.168
+++ window.el   27 Nov 2008 13:19:36 -0000      1.169
@@ -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
+     ((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)
-               (get-buffer-window buffer 'visible)
-               (get-largest-window 'visible nil)
-               (get-buffer-window buffer 0)
-               (get-largest-window 0 nil)
+                     (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)))))
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]