Author: anevilyak Date: 2010-01-17 19:12:39 +0100 (Sun, 17 Jan 2010) New Revision: 35126 Changeset: http://dev.haiku-os.org/changeset/35126/haiku Modified: haiku/trunk/src/kits/tracker/Model.cpp haiku/trunk/src/kits/tracker/Model.h Log: Add a special node type for the Trash analogous to the one used for the root dir. This allows the model to return an arbitrary name not directly tied to the on-disk name for the Trash directory, which a) makes it localizable in the future, and b) means it's not tied to the on-disk name, which removes the requirement that the Trash dir name be uppercase on disk. Modified: haiku/trunk/src/kits/tracker/Model.cpp =================================================================== --- haiku/trunk/src/kits/tracker/Model.cpp 2010-01-17 17:35:06 UTC (rev 35125) +++ haiku/trunk/src/kits/tracker/Model.cpp 2010-01-17 18:12:39 UTC (rev 35126) @@ -331,10 +331,17 @@ switch (fBaseType) { case kRootNode: return "Disks"; + case kVolumeNode: if (fVolumeName) return fVolumeName; - // fall thru + + case kTrashNode: + return "Trash"; + + default: + break; + } return fEntryRef.name; } @@ -402,6 +409,7 @@ case kDirectoryNode: case kVolumeNode: case kRootNode: + case kTrashNode: if (!IsNodeOpen()) fNode = new BDirectory(&fEntryRef); @@ -542,6 +550,7 @@ Model::FinishSettingUpType() { char mimeString[B_MIME_TYPE_LENGTH]; + BEntry entry; // while we are reading the node, do a little // snooping to see if it even makes sense to look for a node-based @@ -587,6 +596,10 @@ switch (fBaseType) { case kDirectoryNode: + entry.SetTo(&fEntryRef); + if (entry.InitCheck() == B_OK && FSIsTrashDir(&entry)) + fBaseType = kTrashNode; + fMimeType = B_DIR_MIMETYPE; // should use a shared string here if (IsNodeOpen()) { BNodeInfo info(fNode); @@ -672,7 +685,8 @@ return; // mirror the logic from FinishSettingUpType - if ((fBaseType == kDirectoryNode || fBaseType == kVolumeNode) + if ((fBaseType == kDirectoryNode || fBaseType == kVolumeNode + || fBaseType == kTrashNode) && !CheckNodeIconHintPrivate(fNode, dynamic_cast<TTracker *>(be_app) == NULL)) { if (WellKnowEntryList::Match(NodeRef()) > (directory_which)-1) { fIconFrom = kTrackerSupplied; @@ -1249,6 +1263,7 @@ break; case kDirectoryNode: + case kTrashNode: PRINT(("dir\n")); break; Modified: haiku/trunk/src/kits/tracker/Model.h =================================================================== --- haiku/trunk/src/kits/tracker/Model.h 2010-01-17 17:35:06 UTC (rev 35125) +++ haiku/trunk/src/kits/tracker/Model.h 2010-01-17 18:12:39 UTC (rev 35126) @@ -227,6 +227,7 @@ kQueryTemplateNode, kVolumeNode, kRootNode, + kTrashNode, kUnknownNode }; @@ -369,7 +370,8 @@ { return fBaseType == kDirectoryNode || fBaseType == kVolumeNode - || fBaseType == kRootNode; + || fBaseType == kRootNode + || fBaseType == kTrashNode; } inline bool