- (old-window (or (and sel-old (car (cdr sel-old)))
- (and all-win (selected-window))))
- (alist (if (setq all-win
- (or all-win view-exit-all-windows-at-exit))
- return-to-alist ; Try to restore all windows.
- (and sel-old (list sel-old))))) ; Only selected window.
+ (alist (cond
+ (all-win ; Try to restore all windows.
+ (append return-to-alist nil)) ; Copy.
+ (sel-old ; Only selected window.
+ (list sel-old))))
+ (old-window (if sel-old (car (cdr sel-old)))))
+ (if all-win ; Follow chains of old-windows.
+ (let ((c (length alist)) a)
+ (while (and (> c 0) ; Safety if mutually refering windows.
+ (or (not (window-live-p old-window))
+ (eq buffer (window-buffer old-window)))
+ (setq a (assq old-window alist)))
+ (setq c (1- c))
+ (setq old-window (car (cdr a))))
+ (if (or (zerop c) (not (window-live-p old-window)))
+ (setq old-window (selected-window)))))