set_selected(struct msgs *mp, int msgnum)
{
assert_msg_range(mp, msgnum);
+
+ if (is_selected(mp, msgnum)) {
+ return;
+ }
+
mp->msgstats[msgnum - mp->lowoff] |= SELECTED;
+ if (mp->lowsel == 0 || msgnum < mp->lowsel) {
+ mp->lowsel = msgnum;
+ }
+ if (msgnum > mp->hghsel) {
+ mp->hghsel = msgnum;
+ }
+ mp->numsel++;
}
void
unset_selected(struct msgs *mp, int msgnum)
{
assert_msg_range(mp, msgnum);
- mp->msgstats[msgnum - mp->lowoff] &= ~SELECTED;
-}
-void
-unset_unseen(struct msgs *mp, int msgnum)
-{
- assert_msg_range(mp, msgnum);
- mp->msgstats[msgnum - mp->lowoff] &= ~SELECT_UNSEEN;
+ if (!is_selected(mp, msgnum)) {
+ return;
+ }
+
+ mp->msgstats[msgnum - mp->lowoff] &= ~SELECTED;
+ if (mp->numsel > 0) {
+ mp->numsel--;
+ }
}