Example #1
0
void
TTracker::InstallTemporaryBackgroundImages()
{
	// make the large Haiku Logo the default background

	BPath path;
	status_t status = find_directory(B_SYSTEM_DATA_DIRECTORY, &path);
	if (status < B_OK) {
		// TODO: this error shouldn't be shown to the regular user
		BString errorMessage(B_TRANSLATE("At %func \nfind_directory() "
			"failed. \nReason: %error"));
		errorMessage.ReplaceFirst("%func", __PRETTY_FUNCTION__);
		errorMessage.ReplaceFirst("%error", strerror(status));
		BAlert* alert = new BAlert("AlertError", errorMessage.String(),
			B_TRANSLATE("OK"), NULL, NULL, B_WIDTH_AS_USUAL, B_STOP_ALERT);
		alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
		alert->Go();
		return;
	}
	path.Append("artwork");

	BString defaultBackgroundImage("/HAIKU logo - white on blue - big.png");

	BDirectory dir;
	if (FSGetBootDeskDir(&dir) == B_OK) {
		// install a default background if there is no background defined yet
		attr_info info;
		if (dir.GetAttrInfo(kBackgroundImageInfo, &info) != B_OK) {
			BScreen screen(B_MAIN_SCREEN_ID);
			BPoint logoPos;
			logoPos.x
				= floorf((screen.Frame().Width() - 605) * (sqrtf(5) - 1) / 2);
			logoPos.y = floorf((screen.Frame().Height() - 190) * 0.9);
			BMessage message;
			AddTemporaryBackgroundImages(&message,
				(BString(path.Path()) << defaultBackgroundImage).String(),
				BackgroundImage::kAtOffset, logoPos, 0xffffffff, false);
			::InstallTemporaryBackgroundImages(&dir, &message);
		}
	}
}
Example #2
0
void
TTracker::InstallTemporaryBackgroundImages()
{
	// make the large Haiku Logo the default background

	BPath path;
	status_t status = find_directory(B_SYSTEM_DATA_DIRECTORY, &path);
	if (status < B_OK) {
		BString errorMessage;
		errorMessage << "At " << __PRETTY_FUNCTION__ << "\n";
		errorMessage << "find_directory() failed. \nReason: ";
		errorMessage << strerror(status);
		(new BAlert("AlertError", errorMessage.String(), "OK", NULL, NULL,
			B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go();
		return;
	}
	path.Append("artwork");

	BString defaultBackgroundImage("/HAIKU logo - white on blue - big.png");

	BDirectory dir;
	if (FSGetBootDeskDir(&dir) == B_OK) {
		// install a default background if there is no background defined yet
		attr_info info;
		if (dir.GetAttrInfo(kBackgroundImageInfo, &info) != B_OK) {
			BScreen screen(B_MAIN_SCREEN_ID);
			BPoint logoPos;
			logoPos.x
				= floorf((screen.Frame().Width() - 605) * (sqrtf(5) - 1) / 2);
			logoPos.y = floorf((screen.Frame().Height() - 190) * 0.9);
			BMessage message;
			AddTemporaryBackgroundImages(&message,
				(BString(path.Path()) << defaultBackgroundImage).String(),
				BackgroundImage::kAtOffset, logoPos, 0xffffffff, false);
			::InstallTemporaryBackgroundImages(&dir, &message);
		}
	}
}
Example #3
0
void
TTracker::ReadyToRun()
{
	gStatusWindow = new BStatusWindow();
	InitMimeTypes();
	InstallDefaultTemplates();
	InstallIndices();
	
	HideVarDir();

	fTrashWatcher = new BTrashWatcher();
	fTrashWatcher->Run();

	fClipboardRefsWatcher = new BClipboardRefsWatcher();
	fClipboardRefsWatcher->Run();
	
	fAutoMounter = new AutoMounter();
	fAutoMounter->Run();
	
	fTaskLoop = new StandAloneTaskLoop(true);

	bool openDisksWindow = false;

	// open desktop window 
	BContainerWindow *deskWindow = NULL;
	BVolume	bootVol;
	BVolumeRoster().GetBootVolume(&bootVol);
	BDirectory deskDir;
	if (FSGetDeskDir(&deskDir, bootVol.Device()) == B_OK) {
		// create desktop
		BEntry entry;
		deskDir.GetEntry(&entry);
		Model *model = new Model(&entry);
		if (model->InitCheck() == B_OK) {
			AutoLock<WindowList> lock(&fWindowList);
			deskWindow = new BDeskWindow(&fWindowList);
			AutoLock<BWindow> windowLock(deskWindow);
			deskWindow->CreatePoseView(model);
			deskWindow->Init();
		} else
			delete model;

		// open previously open windows
		attr_info attrInfo;
		if (!BootedInSafeMode()
			&& deskDir.GetAttrInfo(kAttrOpenWindows, &attrInfo) == B_OK) {
			char *buffer = (char *)malloc((size_t)attrInfo.size);
			BMessage message;
			if (deskDir.ReadAttr(kAttrOpenWindows, B_MESSAGE_TYPE, 0, buffer, (size_t)attrInfo.size)
				== attrInfo.size
				&& message.Unflatten(buffer) == B_OK) {

				node_ref nodeRef;
				deskDir.GetNodeRef(&nodeRef);
	
				int32 stateMessageCounter = 0;
				const char *path;
				for (int32 outer = 0;message.FindString("paths", outer, &path) == B_OK;outer++) {
					int8 flags = 0;
					for (int32 inner = 0;message.FindInt8(path, inner, &flags) == B_OK;inner++) {
						BEntry entry(path, true);
						if (entry.InitCheck() == B_OK) {
							Model *model = new Model(&entry);
							if (model->InitCheck() == B_OK && model->IsContainer()) {
								BMessage state;
								bool restoreStateFromMessage = false;
								if ((flags & kOpenWindowHasState) != 0
									&& message.FindMessage("window state", stateMessageCounter++, &state) == B_OK)
									restoreStateFromMessage = true;

								if (restoreStateFromMessage)
									OpenContainerWindow(model, 0, kOpen, 
										kRestoreWorkspace | (flags & kOpenWindowMinimized ? kIsHidden : 0U),
										false, &state);
								else
									OpenContainerWindow(model, 0, kOpen, 
										kRestoreWorkspace | (flags & kOpenWindowMinimized ? kIsHidden : 0U));
							} else
								delete model;
						}
					}
				}
	
				if (message.HasBool("open_disks_window"))
					openDisksWindow = true;
			}
			free(buffer);
		}
	}

	// create model for root of everything
	if (deskWindow) {
		BEntry entry("/");
		Model model(&entry);
		if (model.InitCheck() == B_OK) {

			if (TrackerSettings().ShowDisksIcon()) {
				// add the root icon to desktop window
				BMessage message;
				message.what = B_NODE_MONITOR;
				message.AddInt32("opcode", B_ENTRY_CREATED);
				message.AddInt32("device", model.NodeRef()->device);
				message.AddInt64("node", model.NodeRef()->node);
				message.AddInt64("directory", model.EntryRef()->directory);
				message.AddString("name", model.EntryRef()->name);
				deskWindow->PostMessage(&message, deskWindow->PoseView());
			}
			
			if (openDisksWindow)
				OpenContainerWindow(new Model(model), 0, kOpen, kRestoreWorkspace);
		}
	}

	// kick off building the mime type list for find panels, etc.
	fMimeTypeList = new MimeTypeList();

	if (!BootedInSafeMode())
		// kick of transient query killer
		DeleteTransientQueriesTask::StartUpTransientQueryCleaner();
}
void 
TTracker::InstallTemporaryBackgroundImages()
{
	
	BPath path;
	FSFindTrackerSettingsDir(&path, false);
	BString defaultFolderPath(path.Path());
	defaultFolderPath << '/' << kDefaultFolderTemplate << '/';
	
	BNode node;
	if (BContainerWindow::DefaultStateSourceNode(kDefaultFolderTemplate, &node, true))
		InstallTemporaryBackgroundImagesIfNeeded(&node,
			(BString(defaultFolderPath) << "backgroundTexture.tga").String(),
			BackgroundImage::kTiled,
			BPoint(0, 0), 0xffffffff, false);

	BDirectory dir;
	if (FSGetBootDeskDir(&dir) == B_OK) {
		attr_info info;
		if (dir.GetAttrInfo(kBackgroundImageInfo, &info) != B_OK) {

			BMessage message;
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bgdefault.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0xffffffff, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg1.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000001, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg2.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000002, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg3.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000004, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg4.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000008, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg5.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000010, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg6.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000020, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg7.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000040, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg8.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000080, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg9.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000100, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg10.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000200, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg11.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000400, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg12.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00000800, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg12.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00001000, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg13.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00002000, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg14.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00002000, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg15.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00004000, true);
			AddTemporaryBackgroundImages(&message,
				(BString(defaultFolderPath) << "bg16.tga").String(),
				BackgroundImage::kScaledToFit,
				BPoint(0, 0), 0x00008000, true);
			::InstallTemporaryBackgroundImages(&dir, &message);
		}
	}
}
Example #5
0
void
TTracker::_OpenPreviouslyOpenedWindows(const char* pathFilter)
{
	size_t filterLength = 0;
	if (pathFilter != NULL)
		filterLength = strlen(pathFilter);

	BDirectory deskDir;
	attr_info attrInfo;
	if (FSGetDeskDir(&deskDir) != B_OK
		|| deskDir.GetAttrInfo(kAttrOpenWindows, &attrInfo) != B_OK)
		return;

	char *buffer = (char *)malloc((size_t)attrInfo.size);
	BMessage message;
	if (deskDir.ReadAttr(kAttrOpenWindows, B_MESSAGE_TYPE, 0, buffer,
		(size_t)attrInfo.size) != attrInfo.size
		|| message.Unflatten(buffer) != B_OK) {
		free(buffer);
		return;
	}

	free(buffer);

	node_ref nodeRef;
	deskDir.GetNodeRef(&nodeRef);

	int32 stateMessageCounter = 0;
	const char *path;
	for (int32 i = 0; message.FindString("paths", i, &path) == B_OK; i++) {
		if (strncmp(path, pathFilter, filterLength))
			continue;

		BEntry entry(path, true);
		if (entry.InitCheck() != B_OK)
			continue;

		int8 flags = 0;
		for (int32 j = 0; message.FindInt8(path, j, &flags) == B_OK; j++) {
			Model *model = new Model(&entry);
			if (model->InitCheck() == B_OK && model->IsContainer()) {
				BMessage state;
				bool restoreStateFromMessage = false;
				if ((flags & kOpenWindowHasState) != 0
					&& message.FindMessage("window state", stateMessageCounter++,
							&state) == B_OK)
					restoreStateFromMessage = true;

				if (restoreStateFromMessage) {
					OpenContainerWindow(model, 0, kOpen, kRestoreWorkspace
						| (flags & kOpenWindowMinimized ? kIsHidden : 0U)
						| kRestoreDecor, false, &state);
				} else {
					OpenContainerWindow(model, 0, kOpen, kRestoreWorkspace
						| (flags & kOpenWindowMinimized ? kIsHidden : 0U)
						| kRestoreDecor);
				}
			} else
				delete model;
		}
	}

	// Open disks window if needed

	if (pathFilter == NULL && TrackerSettings().ShowDisksIcon()
		&& message.HasBool("open_disks_window")) {
		BEntry entry("/");
		Model* model = new Model(&entry);
		if (model->InitCheck() == B_OK)
			OpenContainerWindow(model, 0, kOpen, kRestoreWorkspace);
		else
			delete model;
	}
}