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