;; Author: Yuuichi Teranishi <teranisi@gohome.org>
 ;; Keywords: mail, net news
-;; Time-stamp: <2000-04-13 16:03:31 teranisi>
+;; Time-stamp: <2000-04-18 10:27:36 teranisi>
 
 ;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
 
              (message "Prefetching... %d/%d message(s)"
                       (setq count (+ 1 count)) length))
          ;; redisplay!
-         (save-excursion
-           (save-restriction
-             (widen)
-             (goto-char start-pos)
-             (sit-for 0)))
+         (if (pos-visible-in-window-p)
+             (save-excursion
+               (save-restriction
+                 (widen)
+                 (goto-char start-pos)
+                 (sit-for 0))))
          (setq targets (cdr targets)))
        (message "Prefetched %d/%d message(s)" count length)
        (cons count length)))))
        (last-progress 0)
        mark-alist unread-marks msgs mark importants unreads 
        importants-in-db unreads-in-db has-imap4 diff diffs
-       mes num-ma progress)
+       mes num-ma ma-length progress)
     ;; synchronize marks.
     (when (not (eq (elmo-folder-get-type 
                    wl-summary-buffer-folder-name)
                               wl-summary-new-mark)
            mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb)
             num-ma (length mark-alist)
+           ma-length num-ma
            importants (elmo-list-folder-important 
                        wl-summary-buffer-folder-name
                        (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
                         wl-summary-buffer-folder-name
                         mark-alist unread-marks)))
       (while mark-alist
-       (setq progress (/ (* (- num-ma (length mark-alist)) 100) num-ma))
+       (setq progress (/ (* (- num-ma ma-length) 100) num-ma))
        (if (not (eq progress last-progress))
            (elmo-display-progress 'wl-summary-sync-marks
                                   "Updating marks..."
          (if (member (cadr (car mark-alist)) unread-marks)
              (setq unreads-in-db (cons (car (car mark-alist))
                                        unreads-in-db))))
-       (setq mark-alist (cdr mark-alist)))
+       (setq mark-alist (cdr mark-alist)
+             ma-length (1- ma-length)))
+      (elmo-display-progress 'wl-summary-sync-marks
+                            "Updating marks..."
+                            100)
       (setq diff (elmo-list-diff importants importants-in-db))
       (setq diffs (cadr diff)) ; important-deletes
       (setq mes (format "Updated (-%d" (length diffs)))
                  (save-excursion
                    (forward-line (- 
                                   0 
-                                  wl-summary-partial-highlight-above-lines))
+                                  (or wl-summary-partial-highlight-above-lines
+                                      wl-summary-highlight-partial-threshold)))
                    (wl-highlight-summary (point) (point-max)))
                (wl-highlight-summary (point-min) (point-max))))
          (if (null wl-summary-buffer-msgdb) ;; one more try.