#include "DeskbarUtils.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <AppFileInfo.h>
#include <Debug.h>
#include <Directory.h>
#include <FilePanel.h>
#include <FindDirectory.h>
#include <List.h>
#include <Mime.h>
#include <NodeInfo.h>
#include <Screen.h>
#include <SymLink.h>
#include <Window.h>
#include "BarMenuBar.h"
const char* const kDeskbarMenuEntriesFileName = "menu_entries";
static const char* const kDeskbarDirectoryName = "deskbar";
void
AddRefsToDeskbarMenu(const BMessage* m, entry_ref* subdirectory)
{
if (m) {
int32 count = 0;
uint32 type = 0;
entry_ref ref;
m->GetInfo("refs", &type, &count);
if (count <= 0)
return;
BPath path;
BSymLink link;
BDirectory dir;
if (subdirectory) {
ref = *subdirectory;
BEntry entry(&ref);
if (entry.Exists()) {
if (entry.IsFile()) {
BEntry parent;
entry.GetParent(&parent);
parent.GetRef(&ref);
}
} else
return;
dir.SetTo(&ref);
} else {
if (find_directory(B_USER_DESKBAR_DIRECTORY, &path) == B_OK)
dir.SetTo(path.Path());
else
return;
}
for (long i = 0; i < count; i++) {
if (m->FindRef("refs", i, &ref) == B_NO_ERROR) {
BEntry entry(&ref);
entry.GetPath(&path);
dir.CreateSymLink(ref.name, path.Path(), &link);
}
}
}
}
status_t
GetDeskbarSettingsDirectory(BPath& _path, bool create)
{
status_t error = find_directory(B_USER_SETTINGS_DIRECTORY, &_path, create);
if (error != B_OK)
return error;
error = _path.Append(kDeskbarDirectoryName);
if (error != B_OK)
return error;
return create ? create_directory(_path.Path(), 0755) : error;
}
status_t
GetDeskbarDataDirectory(BPath& _path)
{
status_t error = find_directory(B_SYSTEM_DATA_DIRECTORY, &_path, false);
if (error != B_OK)
return error;
return _path.Append(kDeskbarDirectoryName);
}