From b5d9a119a041ee7d3099685be963cdd33170f766 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Mon, 29 Jul 2024 09:19:48 +0800 Subject: [PATCH] Correct display of Doc View documents after tab switching * lisp/doc-view.el (doc-view-new-window-function): Prevent creation of duplicate overlays for the same window after a window configuration change occasions a call to i-m-r-winprops. (cherry picked from commit a475360af980673fe97a701633375c3a308364c6) --- lisp/doc-view.el | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index ce505b19969..2921af35590 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -432,6 +432,15 @@ of the page moves to the previous page." (defun doc-view-new-window-function (winprops) ;; (message "New window %s for buf %s" (car winprops) (current-buffer)) + ;; + ;; If the window configuration changed, `image-mode-reapply-winprops' + ;; will have erased any previous property list for this window, but + ;; without removing existing overlays for the same, so that they must + ;; be located and erased before a new overlay is created. + (dolist (tem (car (overlay-lists))) + (when (and (eq (overlay-get tem 'window) (car winprops)) + (overlay-get tem 'doc-view)) + (delete-overlay tem))) (cl-assert (or (eq t (car winprops)) (eq (window-buffer (car winprops)) (current-buffer)))) (let ((ol (image-mode-window-get 'overlay winprops))) -- 2.39.5