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