Update flags/read marks even if \* isn't part of the permanent marks.
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Mon, 18 Oct 2010 19:52:19 +0000 (21:52 +0200)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Mon, 18 Oct 2010 19:52:19 +0000 (21:52 +0200)
lisp/ChangeLog
lisp/gnus.el
lisp/nnimap.el

index 263ca2f..3392245 100644 (file)
@@ -2,6 +2,8 @@
 
        * nnimap.el (nnimap-request-group): Don't SELECT the group twice on
        `M-g'.
+       (nnimap-update-info): Update flags/read marks even if \* isn't part of
+       the permanent marks.
 
 2010-10-18  Andrew Cohen  <cohen@andy.bu.edu>
 
index 658bf66..8b43045 100644 (file)
@@ -3937,7 +3937,9 @@ GROUP can also be an INFO structure."
                    (not (eq (caar old-params) name)))
            (setq new-params (append new-params (list (car old-params)))))
          (setq old-params (cdr old-params)))
-       (gnus-group-set-info new-params (gnus-info-group info) 'params)))))
+       (if (listp group)
+           (gnus-info-set-params info new-params t)
+         (gnus-group-set-info new-params (gnus-info-group info) 'params))))))
 
 (defun gnus-group-remove-parameter (group name)
   "Remove parameter NAME from GROUP.
index e0bd292..63f3a2d 100644 (file)
@@ -1112,12 +1112,13 @@ textual parts.")
        (unless (eq permanent-flags 'not-scanned)
          (gnus-group-set-parameter
           info 'permanent-flags
-          (if (memq '%* permanent-flags)
-              t
-            nil)))
+          (and (or (memq '%* permanent-flags)
+                   (memq '%Seen permanent-flags))
+               permanent-flags)))
        ;; Update marks and read articles if this isn't a
        ;; read-only IMAP group.
-       (when (cdr (assq 'permanent-flags (gnus-info-params info)))
+       (when (setq permanent-flags
+                   (cdr (assq 'permanent-flags (gnus-info-params info))))
          (if (and highestmodseq
                   (not start-article))
              ;; We've gotten the data by QRESYNCing.
@@ -1143,27 +1144,32 @@ textual parts.")
                            (gnus-info-read info))
                         (gnus-info-read info))
                       read)))
-             (gnus-info-set-read info read)
+             (when (or (not (listp permanent-flags))
+                       (memq '%Seen permanent-flags))
+               (gnus-info-set-read info read))
              ;; Update the marks.
              (setq marks (gnus-info-marks info))
              (dolist (type (cdr nnimap-mark-alist))
-               (let ((old-marks (assoc (car type) marks))
-                     (new-marks
-                      (gnus-compress-sequence
-                       (cdr (or (assoc (caddr type) flags) ; %Flagged
-                                (assoc (intern (cadr type) obarray) flags)
-                                (assoc (cadr type) flags)))))) ; "\Flagged"
-                 (setq marks (delq old-marks marks))
-                 (pop old-marks)
-                 (when (and old-marks
-                            (> start-article 1))
-                   (setq old-marks (gnus-range-difference
-                                    old-marks
-                                    (cons start-article high)))
-                   (setq new-marks (gnus-range-nconcat old-marks new-marks)))
-                 (when new-marks
-                   (push (cons (car type) new-marks) marks)))
-               (gnus-info-set-marks info marks t)))))
+               (when (or (not (listp permanent-flags))
+                         (memq (assoc (caddr type) flags) permanent-flags)
+                         (memq '%* permanent-flags))
+                 (let ((old-marks (assoc (car type) marks))
+                       (new-marks
+                        (gnus-compress-sequence
+                         (cdr (or (assoc (caddr type) flags) ; %Flagged
+                                  (assoc (intern (cadr type) obarray) flags)
+                                  (assoc (cadr type) flags)))))) ; "\Flagged"
+                   (setq marks (delq old-marks marks))
+                   (pop old-marks)
+                   (when (and old-marks
+                              (> start-article 1))
+                     (setq old-marks (gnus-range-difference
+                                      old-marks
+                                      (cons start-article high)))
+                     (setq new-marks (gnus-range-nconcat old-marks new-marks)))
+                   (when new-marks
+                     (push (cons (car type) new-marks) marks)))))
+             (gnus-info-set-marks info marks t))))
        ;; Note the active level for the next run-through.
        (gnus-group-set-parameter info 'active (gnus-active group))
        (gnus-group-set-parameter info 'uidvalidity uidvalidity)