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 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(); status_t status = node.InitCheck();
if (status != B_OK) if (status != B_OK)
return; return;
@@ -811,7 +811,7 @@ TMailWindow::SetCurrentMessageRead(read_flags flag)
// don't wait for the server write the attribute directly // don't wait for the server write the attribute directly
write_read_attr(node, flag); 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) { if (fIncoming) {
read_flags flag = (fAutoMarkRead == true) ? B_READ : B_SEEN; read_flags flag = (fAutoMarkRead == true) ? B_READ : B_SEEN;
SetCurrentMessageRead(flag); MarkMessageRead(fRef, flag);
} }
if (!fTrackerMessenger.IsValid() || !fIncoming) { if (!fTrackerMessenger.IsValid() || !fIncoming) {
@@ -1461,12 +1461,11 @@ TMailWindow::MessageReceived(BMessage *msg)
// Navigation Messages // Navigation Messages
// //
case M_UNREAD: case M_UNREAD:
SetCurrentMessageRead(B_SEEN); MarkMessageRead(fRef, B_SEEN);
_UpdateReadButton(); _UpdateReadButton();
break; break;
case M_READ: case M_READ:
wasReadMsg = true; wasReadMsg = true;
SetCurrentMessageRead(B_READ);
_UpdateReadButton(); _UpdateReadButton();
msg->what = M_NEXTMSG; msg->what = M_NEXTMSG;
case M_PREVMSG: case M_PREVMSG:
@@ -1474,6 +1473,7 @@ TMailWindow::MessageReceived(BMessage *msg)
{ {
if (fRef == NULL) if (fRef == NULL)
break; break;
entry_ref orgRef = *fRef;
entry_ref nextRef = *fRef; entry_ref nextRef = *fRef;
if (GetTrackerWindowFile(&nextRef, (msg->what == M_NEXTMSG))) { if (GetTrackerWindowFile(&nextRef, (msg->what == M_NEXTMSG))) {
TMailWindow *window = static_cast<TMailApp *>(be_app) TMailWindow *window = static_cast<TMailApp *>(be_app)
@@ -1484,15 +1484,14 @@ TMailWindow::MessageReceived(BMessage *msg)
if (read_read_attr(node, currentFlag) != B_OK) if (read_read_attr(node, currentFlag) != B_OK)
currentFlag = B_UNREAD; currentFlag = B_UNREAD;
if (fAutoMarkRead == true) if (fAutoMarkRead == true)
SetCurrentMessageRead(B_READ); MarkMessageRead(fRef, B_READ);
else if (currentFlag != B_READ && !wasReadMsg) else if (currentFlag != B_READ && !wasReadMsg)
SetCurrentMessageRead(B_SEEN); MarkMessageRead(fRef, B_SEEN);
OpenMessage(&nextRef, OpenMessage(&nextRef,
fHeaderView->fCharacterSetUserSees); fHeaderView->fCharacterSetUserSees);
} else { } else {
window->Activate(); window->Activate();
//fSent = true; //fSent = true;
PostMessage(B_CLOSE_REQUESTED); PostMessage(B_CLOSE_REQUESTED);
} }
@@ -1501,8 +1500,11 @@ TMailWindow::MessageReceived(BMessage *msg)
} else { } else {
if (wasReadMsg) if (wasReadMsg)
PostMessage(B_CLOSE_REQUESTED); PostMessage(B_CLOSE_REQUESTED);
beep(); beep();
} }
if (wasReadMsg)
MarkMessageRead(&orgRef, B_READ);
break; break;
} }
@@ -1713,14 +1715,14 @@ TMailWindow::QuitRequested()
} else if (fRef != NULL && !fKeepStatusOnQuit) { } else if (fRef != NULL && !fKeepStatusOnQuit) {
// ...Otherwise just set the message read // ...Otherwise just set the message read
if (fAutoMarkRead == true) if (fAutoMarkRead == true)
SetCurrentMessageRead(B_READ); MarkMessageRead(fRef, B_READ);
else { else {
BNode node(fRef); BNode node(fRef);
read_flags currentFlag; read_flags currentFlag;
if (read_read_attr(node, currentFlag) != B_OK) if (read_read_attr(node, currentFlag) != B_OK)
currentFlag = B_UNREAD; currentFlag = B_UNREAD;
if (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 SaveTrackerPosition(entry_ref*);
void SetOriginatingWindow(BWindow* window); void SetOriginatingWindow(BWindow* window);
void SetCurrentMessageRead(read_flags flag); void MarkMessageRead(entry_ref* message,
read_flags flag);
void SetTrackerSelectionToCurrent(); void SetTrackerSelectionToCurrent();
TMailWindow* FrontmostWindow(); TMailWindow* FrontmostWindow();
void UpdateViews(); void UpdateViews();