When iterating through mails in a tracker read query window, don't mark the old message as read before retrieving the next message. This would fail because the old message left the query.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41020 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2011-03-18 10:15:42 +00:00
parent 4d1288ba20
commit 07bd7cf4e6
2 changed files with 15 additions and 12 deletions
+13 -11
View File
@@ -796,9 +796,9 @@ TMailWindow::SetTrackerSelectionToCurrent()
void
TMailWindow::SetCurrentMessageRead(read_flags flag)
TMailWindow::MarkMessageRead(entry_ref* message, read_flags flag)
{
BNode node(fRef);
BNode node(message);
status_t status = node.InitCheck();
if (status != B_OK)
return;
@@ -811,7 +811,7 @@ TMailWindow::SetCurrentMessageRead(read_flags flag)
// don't wait for the server write the attribute directly
write_read_attr(node, flag);
BMailDaemon::MarkAsRead(account, *fRef, flag);
BMailDaemon::MarkAsRead(account, *message, flag);
}
@@ -1130,7 +1130,7 @@ TMailWindow::MessageReceived(BMessage *msg)
}
if (fIncoming) {
read_flags flag = (fAutoMarkRead == true) ? B_READ : B_SEEN;
SetCurrentMessageRead(flag);
MarkMessageRead(fRef, flag);
}
if (!fTrackerMessenger.IsValid() || !fIncoming) {
@@ -1461,12 +1461,11 @@ TMailWindow::MessageReceived(BMessage *msg)
// Navigation Messages
//
case M_UNREAD:
SetCurrentMessageRead(B_SEEN);
MarkMessageRead(fRef, B_SEEN);
_UpdateReadButton();
break;
case M_READ:
wasReadMsg = true;
SetCurrentMessageRead(B_READ);
_UpdateReadButton();
msg->what = M_NEXTMSG;
case M_PREVMSG:
@@ -1474,6 +1473,7 @@ TMailWindow::MessageReceived(BMessage *msg)
{
if (fRef == NULL)
break;
entry_ref orgRef = *fRef;
entry_ref nextRef = *fRef;
if (GetTrackerWindowFile(&nextRef, (msg->what == M_NEXTMSG))) {
TMailWindow *window = static_cast<TMailApp *>(be_app)
@@ -1484,15 +1484,14 @@ TMailWindow::MessageReceived(BMessage *msg)
if (read_read_attr(node, currentFlag) != B_OK)
currentFlag = B_UNREAD;
if (fAutoMarkRead == true)
SetCurrentMessageRead(B_READ);
MarkMessageRead(fRef, B_READ);
else if (currentFlag != B_READ && !wasReadMsg)
SetCurrentMessageRead(B_SEEN);
MarkMessageRead(fRef, B_SEEN);
OpenMessage(&nextRef,
fHeaderView->fCharacterSetUserSees);
} else {
window->Activate();
//fSent = true;
PostMessage(B_CLOSE_REQUESTED);
}
@@ -1501,8 +1500,11 @@ TMailWindow::MessageReceived(BMessage *msg)
} else {
if (wasReadMsg)
PostMessage(B_CLOSE_REQUESTED);
beep();
}
if (wasReadMsg)
MarkMessageRead(&orgRef, B_READ);
break;
}
@@ -1713,14 +1715,14 @@ TMailWindow::QuitRequested()
} else if (fRef != NULL && !fKeepStatusOnQuit) {
// ...Otherwise just set the message read
if (fAutoMarkRead == true)
SetCurrentMessageRead(B_READ);
MarkMessageRead(fRef, B_READ);
else {
BNode node(fRef);
read_flags currentFlag;
if (read_read_attr(node, currentFlag) != B_OK)
currentFlag = B_UNREAD;
if (currentFlag == B_UNREAD)
SetCurrentMessageRead(B_SEEN);
MarkMessageRead(fRef, B_SEEN);
}
}
+2 -1
View File
@@ -108,7 +108,8 @@ class TMailWindow : public BWindow {
void SaveTrackerPosition(entry_ref*);
void SetOriginatingWindow(BWindow* window);
void SetCurrentMessageRead(read_flags flag);
void MarkMessageRead(entry_ref* message,
read_flags flag);
void SetTrackerSelectionToCurrent();
TMailWindow* FrontmostWindow();
void UpdateViews();