emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r105644: Don't delete frame when ther


From: martin rudalics
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r105644: Don't delete frame when there's a previous buffer to show (Bug#9419).
Date: Sat, 03 Sep 2011 12:55:37 +0200
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 105644
committer: martin rudalics <address@hidden>
branch nick: trunk
timestamp: Sat 2011-09-03 12:55:37 +0200
message:
  Don't delete frame when there's a previous buffer to show (Bug#9419).
  
  * window.el (window-deletable-p): Don't return a non-nil value
  when there's a buffer that was shown in the window before.
  (Bug#9419)
  (display-buffer-pop-up-frame, display-buffer-pop-up-window): Set
  window's previous buffers to nil.
modified:
  lisp/ChangeLog
  lisp/window.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-09-03 08:44:16 +0000
+++ b/lisp/ChangeLog    2011-09-03 10:55:37 +0000
@@ -1,3 +1,11 @@
+2011-09-03  Martin Rudalics  <address@hidden>
+
+       * window.el (window-deletable-p): Don't return a non-nil value
+       when there's a buffer that was shown in the window before.
+       (Bug#9419)
+       (display-buffer-pop-up-frame, display-buffer-pop-up-window): Set
+       window's previous buffers to nil.
+
 2011-09-03  Eli Zaretskii  <address@hidden>
 
        * mail/rmailmm.el (rmail-mime-insert-tagline): Insert an extra

=== modified file 'lisp/window.el'
--- a/lisp/window.el    2011-09-02 16:38:40 +0000
+++ b/lisp/window.el    2011-09-03 10:55:37 +0000
@@ -2291,29 +2291,45 @@
       (setq window (window-atom-root window))))
   (let ((parent (window-parent window))
        (frame (window-frame window))
+       (buffer (window-buffer window))
        (dedicated (and (window-buffer window) (window-dedicated-p window)))
        (quit-restore (window-parameter window 'quit-restore)))
     (cond
      ((frame-root-window-p window)
+     ;; Don't delete FRAME if `frame-auto-delete' is nil.
       (when (and (or (eq frame-auto-delete t)
                     (and (eq frame-auto-delete 'automatic)
+                         ;; Delete FRAME only if it's either dedicated
+                         ;; or quit-restore's car is `new-frame' and
+                         ;; WINDOW still displays the same buffer
                          (or dedicated
                              (and (eq (car-safe quit-restore) 'new-frame)
                                   (eq (nth 1 quit-restore)
                                       (window-buffer window))))))
+                ;; Don't delete FRAME if we have another buffer in
+                ;; WINDOW's previous buffers.  Bug#9419.
+                (or (not (window-prev-buffers window))
+                    (eq (caar (window-prev-buffers window)) buffer))
+                ;; Don't try to delete FRAME when there are no other
+                ;; visible frames left.
                 (other-visible-frames-p frame))
-       ;; WINDOW is the root window of its frame.  Return `frame' but
-       ;; only if WINDOW is (1) either dedicated or quit-restore's car
-       ;; is `new-frame' and the window still displays the same buffer
-       ;; and (2) there are other frames left.
        'frame))
-     ((and (not ignore-window-parameters)
-          (eq (window-parameter window 'window-side) 'none)
-          (or (not parent)
-              (not (eq (window-parameter parent 'window-side) 'none))))
-      ;; Can't delete last main window.
-      nil)
-     (t))))
+     ;; Don't delete WINDOW if we find another buffer in WINDOW's
+     ;; previous buffers.
+     ((and (or (not (window-prev-buffers window))
+              (eq (caar (window-prev-buffers window)) buffer))
+          ;; Delete WINDOW only if it's dedicated or quit-restore's car
+          ;; is `new-frame' or `new-window' and it still displays the
+          ;; same buffer.
+          (or dedicated
+              (and (memq (car-safe quit-restore) '(new-window new-frame))
+                   (eq (nth 1 quit-restore) (window-buffer window))))
+          ;; Don't delete the last main window.
+          (or ignore-window-parameters
+              (not (eq (window-parameter window 'window-side) 'none))
+              (and parent
+                   (eq (window-parameter parent 'window-side) 'none))))
+      t))))
 
 (defun window-or-subwindow-p (subwindow window)
   "Return t if SUBWINDOW is either WINDOW or a subwindow of WINDOW."
@@ -4714,7 +4730,10 @@
               (setq frame (funcall fun))
               (setq window (frame-selected-window frame)))
       (display-buffer-record-window 'pop-up-frame window buffer)
-      (window--display-buffer-2 buffer window))))
+      (window--display-buffer-2 buffer window)
+      ;; Reset list of WINDOW's previous buffers to nil.
+      (set-window-prev-buffers window nil)
+      window)))
 
 (defun display-buffer-pop-up-window (buffer alist)
   "Display BUFFER by popping up a new window.
@@ -4737,7 +4756,10 @@
                                (window--try-to-split-window
                                 (get-lru-window frame t)))))
       (display-buffer-record-window 'pop-up-window window buffer)
-      (window--display-buffer-2 buffer window))))
+      (window--display-buffer-2 buffer window)
+      ;; Reset list of WINDOW's previous buffers to nil.
+      (set-window-prev-buffers window nil)
+      window)))
 
 ;; This display action function groups together some lower-level ones:
 (defun display-buffer-reuse-or-pop-window (buffer alist)


reply via email to

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