diff --git a/headers/private/shared/OpenWithTracker.h b/headers/private/shared/OpenWithTracker.h new file mode 100644 index 0000000000..a256921565 --- /dev/null +++ b/headers/private/shared/OpenWithTracker.h @@ -0,0 +1,66 @@ +/* + * Copyright 2009 Haiku Inc. + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef _OPEN_WITH_TRACKER_H +#define _OPEN_WITH_TRACKER_H + + +#include +#include +#include +#include +#include + + +status_t +OpenWithTracker(const entry_ref* ref) +{ + status_t status; + BMessage message(B_REFS_RECEIVED); + message.AddRef("refs", ref); + + BMessenger tracker("application/x-vnd.Be-TRAK"); + status = tracker.SendMessage(&message); + return status; +} + + +status_t +OpenWithTracker(const char* path) +{ + status_t status; + entry_ref ref; + status = get_ref_for_path(path, &ref); + if (status != B_OK) + return status; + + return OpenWithTracker(&ref); +} + + +status_t +OpenWithTracker(directory_which which, const char* relativePath, + bool createDirectory = false, BVolume* volume = NULL) +{ + status_t status; + BPath path; + find_directory(which, &path, createDirectory, volume); + path.Append(relativePath); + + entry_ref ref; + BEntry entry(path.Path()); + + if (!entry.Exists()) + return B_NAME_NOT_FOUND; + + status = entry.GetRef(&ref); + if (status != B_OK) + return status; + + return OpenWithTracker(&ref); +} + + +#endif // _OPEN_WITH_TRACKER_H + diff --git a/src/apps/mail/MailSupport.cpp b/src/apps/mail/MailSupport.cpp index 55aff05f86..3d8efabec5 100644 --- a/src/apps/mail/MailSupport.cpp +++ b/src/apps/mail/MailSupport.cpp @@ -93,7 +93,8 @@ const char* kSpamServerSignature = const char* kDraftPath = "mail/draft"; const char* kDraftType = "text/x-vnd.Be-MailDraft"; const char* kMailFolder = "mail"; -const char* kMailboxFolder = "config/settings/Mail/mailbox"; +const char* kMailboxSymlink = "Mail/mailbox"; + // relative to B_USER_SETTINGS_DIRECTORY int32 diff --git a/src/apps/mail/MailSupport.h b/src/apps/mail/MailSupport.h index 8516463a5d..da521069f8 100644 --- a/src/apps/mail/MailSupport.h +++ b/src/apps/mail/MailSupport.h @@ -79,7 +79,8 @@ extern const char* kSpamServerSignature; extern const char* kDraftPath; extern const char* kDraftType; extern const char* kMailFolder; -extern const char* kMailboxFolder; +extern const char* kMailboxSymlink; #endif // _MAIL_SUPPORT_H + diff --git a/src/apps/mail/MailWindow.cpp b/src/apps/mail/MailWindow.cpp index 2b40f09038..abc6c6bf0c 100644 --- a/src/apps/mail/MailWindow.cpp +++ b/src/apps/mail/MailWindow.cpp @@ -48,6 +48,7 @@ All rights reserved. #include #include #include +#include #ifdef __HAIKU__ # include #endif @@ -1475,29 +1476,13 @@ TMailWindow::MessageReceived(BMessage *msg) break; case M_OPEN_MAIL_FOLDER: - case M_OPEN_MAIL_BOX: - { - BEntry folderEntry; - BPath path; - // Get the user home directory - if (find_directory(B_USER_DIRECTORY, &path) != B_OK) - break; - if (msg->what == M_OPEN_MAIL_FOLDER) - path.Append(kMailFolder); - else - path.Append(kMailboxFolder); - if (folderEntry.SetTo(path.Path()) == B_OK && folderEntry.Exists()) - { - BMessage thePackage(B_REFS_RECEIVED); - BMessenger tracker("application/x-vnd.Be-TRAK"); - - entry_ref ref; - folderEntry.GetRef(&ref); - thePackage.AddRef("refs", &ref); - tracker.SendMessage(&thePackage); - } + OpenWithTracker(B_USER_DIRECTORY, kMailFolder); break; - } + + case M_OPEN_MAIL_BOX: + OpenWithTracker(B_USER_SETTINGS_DIRECTORY, kMailboxSymlink); + break; + case RESET_BUTTONS: fChanged = false; fFieldState = 0; diff --git a/src/servers/mail/DeskbarView.cpp b/src/servers/mail/DeskbarView.cpp index 8632d4f638..448ab1b2dd 100644 --- a/src/servers/mail/DeskbarView.cpp +++ b/src/servers/mail/DeskbarView.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -196,28 +197,6 @@ void DeskbarView::Draw(BRect /*updateRect*/) } -status_t OpenFolder(const char* end) -{ - BPath path; - find_directory(B_USER_DIRECTORY, &path); - path.Append(end); - - entry_ref ref; - if (get_ref_for_path(path.Path(), &ref) != B_OK) - return B_NAME_NOT_FOUND; - - if (!BEntry(&ref).Exists()) - return B_NAME_NOT_FOUND; - - BMessage open_mbox(B_REFS_RECEIVED); - open_mbox.AddRef("refs",&ref); - - BMessenger tracker("application/x-vnd.Be-TRAK"); - tracker.SendMessage(&open_mbox); - return B_OK; -} - - void DeskbarView::MessageReceived(BMessage* message) { @@ -344,10 +323,9 @@ void DeskbarView::MouseUp(BPoint pos) { if (fLastButtons & B_PRIMARY_MOUSE_BUTTON) { - if (OpenFolder("config/settings/Mail/mailbox") != B_OK - && OpenFolder("mail/in") != B_OK - && OpenFolder("mail/INBOX") != B_OK) - OpenFolder("mail"); + if (OpenWithTracker(B_USER_SETTINGS_DIRECTORY, "Mail/mailbox") != B_OK + && OpenWithTracker(B_USER_DIRECTORY, "mail/in") != B_OK) + OpenWithTracker(B_USER_DIRECTORY, "mail"); } if (fLastButtons & B_TERTIARY_MOUSE_BUTTON) diff --git a/src/servers/mail/Jamfile b/src/servers/mail/Jamfile index 1e0d4fae6a..4e77dd696b 100644 --- a/src/servers/mail/Jamfile +++ b/src/servers/mail/Jamfile @@ -8,6 +8,7 @@ if $(TARGET_PLATFORM) != haiku { UsePublicHeaders [ FDirName add-ons mail_daemon ] ; UsePrivateHeaders mail ; +UsePrivateHeaders shared ; UseLibraryHeaders icon ; SubDirHdrs [ FDirName $(HAIKU_TOP) headers os add-ons mail_daemon ] ;