xref: /haiku/src/preferences/screensaver/ScreenSaverApp.cpp (revision 7cae4a1ee0a7e8f1214e6fa410efe9f5a0c7cecb)
1*7cae4a1eSAxel Dörfler /*
2*7cae4a1eSAxel Dörfler  * Copyright 2003-2006, Haiku.
3*7cae4a1eSAxel Dörfler  * Distributed under the terms of the MIT License.
4*7cae4a1eSAxel Dörfler  *
5*7cae4a1eSAxel Dörfler  * Authors:
6*7cae4a1eSAxel Dörfler  *		Michael Phipps
7*7cae4a1eSAxel Dörfler  *		Jérôme Duval, jerome.duval@free.fr
8*7cae4a1eSAxel Dörfler  */
9*7cae4a1eSAxel Dörfler 
10*7cae4a1eSAxel Dörfler 
11*7cae4a1eSAxel Dörfler #include "ScreenSaverWindow.h"
12*7cae4a1eSAxel Dörfler 
13*7cae4a1eSAxel Dörfler #include <Application.h>
14*7cae4a1eSAxel Dörfler #include <Entry.h>
15*7cae4a1eSAxel Dörfler #include <Path.h>
16*7cae4a1eSAxel Dörfler 
17*7cae4a1eSAxel Dörfler #include <stdio.h>
18*7cae4a1eSAxel Dörfler #include <stdlib.h>
19*7cae4a1eSAxel Dörfler #include <unistd.h>
20*7cae4a1eSAxel Dörfler 
21*7cae4a1eSAxel Dörfler 
22*7cae4a1eSAxel Dörfler class ScreenSaverApp : public BApplication {
23*7cae4a1eSAxel Dörfler 	public:
24*7cae4a1eSAxel Dörfler 		ScreenSaverApp();
25*7cae4a1eSAxel Dörfler 		virtual void RefsReceived(BMessage *message);
26*7cae4a1eSAxel Dörfler 
27*7cae4a1eSAxel Dörfler 	private:
28*7cae4a1eSAxel Dörfler 		BWindow *fScreenSaverWindow;
29*7cae4a1eSAxel Dörfler };
30*7cae4a1eSAxel Dörfler 
31*7cae4a1eSAxel Dörfler 
32*7cae4a1eSAxel Dörfler ScreenSaverApp::ScreenSaverApp()
33*7cae4a1eSAxel Dörfler 	: BApplication("application/x-vnd.haiku.ScreenSaver")
34*7cae4a1eSAxel Dörfler {
35*7cae4a1eSAxel Dörfler   	fScreenSaverWindow = new ScreenSaverWindow();
36*7cae4a1eSAxel Dörfler   	fScreenSaverWindow->Show();
37*7cae4a1eSAxel Dörfler }
38*7cae4a1eSAxel Dörfler 
39*7cae4a1eSAxel Dörfler 
40*7cae4a1eSAxel Dörfler void
41*7cae4a1eSAxel Dörfler ScreenSaverApp::RefsReceived(BMessage *message)
42*7cae4a1eSAxel Dörfler {
43*7cae4a1eSAxel Dörfler 	entry_ref ref;
44*7cae4a1eSAxel Dörfler 	if (message->FindRef("refs", &ref) != B_OK)
45*7cae4a1eSAxel Dörfler 		return;
46*7cae4a1eSAxel Dörfler 
47*7cae4a1eSAxel Dörfler 	// Install the screen saver by copying it to the add-ons directory
48*7cae4a1eSAxel Dörfler 	// TODO: the translator have a similar mechanism - this could be cleaned
49*7cae4a1eSAxel Dörfler 	//	up and have one nicely working solution
50*7cae4a1eSAxel Dörfler 	// TODO: should test if the dropped ref is really a screen saver!
51*7cae4a1eSAxel Dörfler 	// TODO: you can receive more than one ref at a time...
52*7cae4a1eSAxel Dörfler 
53*7cae4a1eSAxel Dörfler 	BEntry entry;
54*7cae4a1eSAxel Dörfler 	entry.SetTo(&ref, true);
55*7cae4a1eSAxel Dörfler 	if (entry.InitCheck() != B_OK)
56*7cae4a1eSAxel Dörfler 		return;
57*7cae4a1eSAxel Dörfler 
58*7cae4a1eSAxel Dörfler 	BPath path;
59*7cae4a1eSAxel Dörfler 	entry.GetPath(&path);
60*7cae4a1eSAxel Dörfler 
61*7cae4a1eSAxel Dörfler 	// TODO: find_directory() anyone??
62*7cae4a1eSAxel Dörfler 	char temp[2*B_PATH_NAME_LENGTH];
63*7cae4a1eSAxel Dörfler 	sprintf(temp,"cp %s '/boot/home/config/add-ons/Screen Savers/'\n", path.Path());
64*7cae4a1eSAxel Dörfler 	system(temp);
65*7cae4a1eSAxel Dörfler 	fScreenSaverWindow->PostMessage(kMsgUpdateList);
66*7cae4a1eSAxel Dörfler }
67*7cae4a1eSAxel Dörfler 
68*7cae4a1eSAxel Dörfler 
69*7cae4a1eSAxel Dörfler //	#pragma mark -
70*7cae4a1eSAxel Dörfler 
71*7cae4a1eSAxel Dörfler 
72*7cae4a1eSAxel Dörfler int
73*7cae4a1eSAxel Dörfler main()
74*7cae4a1eSAxel Dörfler {
75*7cae4a1eSAxel Dörfler 	ScreenSaverApp app;
76*7cae4a1eSAxel Dörfler 	app.Run();
77*7cae4a1eSAxel Dörfler 	return 0;
78*7cae4a1eSAxel Dörfler }
79