diff lisp/window.el @ 106238:8cb41d65f821

Really make the *Completions* window soft-dedicated (bug#5030). * window.el (window--display-buffer-2): Add `dedicated' argument. (display-buffer): Pass it when needed so the dedicated flag is set after calling set-window-buffer, which would otherwise reset it.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 25 Nov 2009 16:36:04 +0000
parents 34a3dd721f80
children f4a3f47777f7
line wrap: on
line diff
--- a/lisp/window.el	Wed Nov 25 16:19:51 2009 +0000
+++ b/lisp/window.el	Wed Nov 25 16:36:04 2009 +0000
@@ -1035,11 +1035,14 @@
       (raise-frame frame))
     window))
 
-(defun window--display-buffer-2 (buffer window)
+(defun window--display-buffer-2 (buffer window &optional dedicated)
   "Display BUFFER in WINDOW and make its frame visible.
+Set `window-dedicated-p' to DEDICATED if non-nil.
 Return WINDOW."
   (when (and (buffer-live-p buffer) (window-live-p window))
     (set-window-buffer window buffer)
+    (when dedicated
+      (set-window-dedicated-p window-to-use dedicated))
     (window--display-buffer-1 window)))
 
 (defvar display-buffer-mark-dedicated nil
@@ -1139,9 +1142,7 @@
      ((or use-pop-up-frames (not frame-to-use))
       ;; We want or need a new frame.
       (let ((win (frame-selected-window (funcall pop-up-frame-function))))
-        (when display-buffer-mark-dedicated
-          (set-window-dedicated-p win display-buffer-mark-dedicated))
-        (window--display-buffer-2 buffer win)))
+        (window--display-buffer-2 buffer win display-buffer-mark-dedicated)))
      ((and pop-up-windows
 	   ;; Make a new window.
 	   (or (not (frame-parameter frame-to-use 'unsplittable))
@@ -1157,9 +1158,8 @@
 		      (get-largest-window frame-to-use t))
 		     (window--try-to-split-window
 		      (get-lru-window frame-to-use t)))))
-      (when display-buffer-mark-dedicated
-        (set-window-dedicated-p window-to-use display-buffer-mark-dedicated))
-      (window--display-buffer-2 buffer window-to-use))
+      (window--display-buffer-2 buffer window-to-use
+                                display-buffer-mark-dedicated))
      ((let ((window-to-undedicate
 	     ;; When NOT-THIS-WINDOW is non-nil, temporarily dedicate
 	     ;; the selected window to its buffer, to avoid that some of