When counting new messages in the deskbar replicant, ignore messages that are in the Trash.

Fixes ticket #5401.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35458 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent
2010-02-14 03:58:33 +00:00
parent 861e4437b1
commit 82471d43cb
2 changed files with 44 additions and 5 deletions
+40 -2
View File
@@ -126,6 +126,22 @@ void DeskbarView::AttachedToWindow()
} }
bool DeskbarView::_EntryInTrash(const entry_ref* entry)
{
BPath trashPath;
BPath entryPath(entry);
BVolume volume(entry->device);
if (volume.InitCheck() == B_OK) {
find_directory(B_TRASH_DIRECTORY, &trashPath, false, &volume);
if (strncmp(entryPath.Path(), trashPath.Path(),
strlen(trashPath.Path())) == 0)
return true;
}
return false;
}
void DeskbarView::_RefreshMailQuery() void DeskbarView::_RefreshMailQuery()
{ {
for (int32 i = 0; i < fNewMailQueries.CountItems(); i++) for (int32 i = 0; i < fNewMailQueries.CountItems(); i++)
@@ -138,7 +154,6 @@ void DeskbarView::_RefreshMailQuery()
while (volumes.GetNextVolume(&volume) == B_OK) { while (volumes.GetNextVolume(&volume) == B_OK) {
BQuery *newMailQuery = new BQuery; BQuery *newMailQuery = new BQuery;
newMailQuery->SetTarget(this); newMailQuery->SetTarget(this);
newMailQuery->SetVolume(&volume); newMailQuery->SetVolume(&volume);
newMailQuery->PushAttr(B_MAIL_ATTR_STATUS); newMailQuery->PushAttr(B_MAIL_ATTR_STATUS);
@@ -156,9 +171,13 @@ void DeskbarView::_RefreshMailQuery()
BEntry entry; BEntry entry;
while (newMailQuery->GetNextEntry(&entry) == B_OK) { while (newMailQuery->GetNextEntry(&entry) == B_OK) {
if (entry.InitCheck() == B_OK) if (entry.InitCheck() == B_OK) {
entry_ref ref;
entry.GetRef(&ref);
if (!_EntryInTrash(&ref))
fNewMessages++; fNewMessages++;
} }
}
fNewMailQueries.AddItem(newMailQuery); fNewMailQueries.AddItem(newMailQuery);
} }
@@ -231,12 +250,31 @@ DeskbarView::MessageReceived(BMessage* message)
case B_QUERY_UPDATE: case B_QUERY_UPDATE:
{ {
int32 what; int32 what;
dev_t device;
ino_t directory;
const char *name;
entry_ref ref;
message->FindInt32("opcode", &what); message->FindInt32("opcode", &what);
message->FindInt32("device", &device);
message->FindInt64("directory", &directory);
switch (what) { switch (what) {
case B_ENTRY_CREATED: case B_ENTRY_CREATED:
if (message->FindString("name", &name) == B_OK) {
ref.device = device;
ref.directory = directory;
ref.set_name(name);
if (!_EntryInTrash(&ref))
fNewMessages++; fNewMessages++;
}
break; break;
case B_ENTRY_REMOVED: case B_ENTRY_REMOVED:
node_ref node;
node.device = device;
node.node = directory;
BDirectory dir(&node);
BEntry entry(&dir, NULL);
entry.GetRef(&ref);
if (!_EntryInTrash(&ref))
fNewMessages--; fNewMessages--;
break; break;
} }
+1
View File
@@ -48,6 +48,7 @@ public:
virtual void Pulse(); virtual void Pulse();
private: private:
bool _EntryInTrash(const entry_ref*);
void _RefreshMailQuery(); void _RefreshMailQuery();
bool _CreateMenuLinks(BDirectory&, BPath&); bool _CreateMenuLinks(BDirectory&, BPath&);
void _CreateNewMailQuery(BEntry&); void _CreateNewMailQuery(BEntry&);