Damn, I forgot to include this directory when committing the screen saver changes.
This should have been part of r17731. Fixes the build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17747 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
a63dcbc187
commit
d7b390a6c0
|
@ -2,12 +2,15 @@ SubDir HAIKU_TOP src kits screensaver ;
|
||||||
|
|
||||||
SetSubDirSupportedPlatformsBeOSCompatible ;
|
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||||
|
|
||||||
|
UseHeaders [ FDirName headers os add-ons screen_saver ] ;
|
||||||
|
# we also need our headers when build for BeOS
|
||||||
|
|
||||||
UsePrivateHeaders screen_saver ;
|
UsePrivateHeaders screen_saver ;
|
||||||
|
|
||||||
SharedLibrary libscreensaver.so :
|
SharedLibrary libscreensaver.so :
|
||||||
ScreenSaver.cpp
|
ScreenSaver.cpp
|
||||||
ScreenSaverPrefs.cpp
|
ScreenSaverPrefs.cpp
|
||||||
ScreenSaverThread.cpp
|
ScreenSaverRunner.cpp
|
||||||
:
|
:
|
||||||
be game
|
be game
|
||||||
;
|
;
|
||||||
|
@ -17,4 +20,4 @@ Package haiku-screensaverkit-cvs :
|
||||||
boot home config lib ;
|
boot home config lib ;
|
||||||
|
|
||||||
Packages haiku-screensaverkit-cvs :
|
Packages haiku-screensaverkit-cvs :
|
||||||
README ;
|
README ;
|
||||||
|
|
|
@ -1,189 +1,167 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2003, Michael Phipps. All rights reserved.
|
* Copyright 2003-2006, Michael Phipps. All rights reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "ScreenSaver.h"
|
#include "ScreenSaver.h"
|
||||||
|
|
||||||
BScreenSaver::BScreenSaver(BMessage *archive,
|
|
||||||
image_id) : ticksize(50000),looponcount(0),loopoffcount(0)
|
BScreenSaver::BScreenSaver(BMessage *archive, image_id thisImage)
|
||||||
|
:
|
||||||
|
fTickSize(50000),
|
||||||
|
fLoopOnCount(0),
|
||||||
|
fLoopOffCount(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BScreenSaver::~BScreenSaver()
|
BScreenSaver::~BScreenSaver()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BScreenSaver::InitCheck()
|
BScreenSaver::InitCheck()
|
||||||
{
|
{
|
||||||
return B_OK; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BScreenSaver::StartSaver(BView *view, bool preview)
|
BScreenSaver::StartSaver(BView *view, bool preview)
|
||||||
{
|
{
|
||||||
return B_OK; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::StopSaver()
|
BScreenSaver::StopSaver()
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::Draw(BView *view, int32 frame)
|
BScreenSaver::Draw(BView *view, int32 frame)
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::DirectConnected(direct_buffer_info *info)
|
BScreenSaver::DirectConnected(direct_buffer_info *info)
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::DirectDraw(int32 frame)
|
BScreenSaver::DirectDraw(int32 frame)
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::StartConfig(BView *configView)
|
BScreenSaver::StartConfig(BView *configView)
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::StopConfig()
|
BScreenSaver::StopConfig()
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::SupplyInfo(BMessage *info) const
|
BScreenSaver::SupplyInfo(BMessage* info) const
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::ModulesChanged(const BMessage *info)
|
BScreenSaver::ModulesChanged(const BMessage* info)
|
||||||
{
|
{
|
||||||
return; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BScreenSaver::SaveState(BMessage *into) const
|
BScreenSaver::SaveState(BMessage *into) const
|
||||||
{
|
{
|
||||||
return B_ERROR; // This method is meant to be overridden
|
// This method is meant to be overridden
|
||||||
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::SetTickSize(bigtime_t ts)
|
BScreenSaver::SetTickSize(bigtime_t tickSize)
|
||||||
{
|
{
|
||||||
ticksize = ts;
|
fTickSize = tickSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bigtime_t
|
bigtime_t
|
||||||
BScreenSaver::TickSize() const
|
BScreenSaver::TickSize() const
|
||||||
{
|
{
|
||||||
return ticksize;
|
return fTickSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BScreenSaver::SetLoop(int32 on_count, int32 off_count)
|
BScreenSaver::SetLoop(int32 onCount, int32 offCount)
|
||||||
{
|
{
|
||||||
looponcount = on_count;
|
fLoopOnCount = onCount;
|
||||||
loopoffcount = off_count;
|
fLoopOffCount = offCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
BScreenSaver::LoopOnCount() const
|
BScreenSaver::LoopOnCount() const
|
||||||
{
|
{
|
||||||
return looponcount;
|
return fLoopOnCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
BScreenSaver::LoopOffCount() const
|
BScreenSaver::LoopOffCount() const
|
||||||
{
|
{
|
||||||
return loopoffcount;
|
return fLoopOffCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void BScreenSaver::_ReservedScreenSaver1() {}
|
||||||
BScreenSaver::_ReservedScreenSaver1()
|
void BScreenSaver::_ReservedScreenSaver2() {}
|
||||||
{
|
void BScreenSaver::_ReservedScreenSaver3() {}
|
||||||
}
|
void BScreenSaver::_ReservedScreenSaver4() {}
|
||||||
|
void BScreenSaver::_ReservedScreenSaver5() {}
|
||||||
|
void BScreenSaver::_ReservedScreenSaver6() {}
|
||||||
void
|
void BScreenSaver::_ReservedScreenSaver7() {}
|
||||||
BScreenSaver::_ReservedScreenSaver2()
|
void BScreenSaver::_ReservedScreenSaver8() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver3()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver4()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver5()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver6()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver7()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
BScreenSaver::_ReservedScreenSaver8()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
// for compatibility with older BeOS versions
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void ReservedScreenSaver1__12BScreenSaver () {}
|
void ReservedScreenSaver1__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver2__12BScreenSaver () {}
|
void ReservedScreenSaver2__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver3__12BScreenSaver () {}
|
void ReservedScreenSaver3__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver4__12BScreenSaver () {}
|
void ReservedScreenSaver4__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver5__12BScreenSaver () {}
|
void ReservedScreenSaver5__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver6__12BScreenSaver () {}
|
void ReservedScreenSaver6__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver7__12BScreenSaver () {}
|
void ReservedScreenSaver7__12BScreenSaver() {}
|
||||||
void ReservedScreenSaver8__12BScreenSaver () {}
|
void ReservedScreenSaver8__12BScreenSaver() {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,82 +1,92 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2003-2005, Haiku.
|
* Copyright 2003-2006, Haiku.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Michael Phipps
|
* Michael Phipps
|
||||||
* Jérôme Duval, jerome.duval@free.fr
|
* Jérôme Duval, jerome.duval@free.fr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ScreenSaverPrefs.h"
|
||||||
|
|
||||||
#include <Debug.h>
|
#include <Debug.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <FindDirectory.h>
|
#include <FindDirectory.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <StorageDefs.h>
|
#include <StorageDefs.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ScreenSaverPrefs.h"
|
|
||||||
|
|
||||||
ScreenSaverPrefs::ScreenSaverPrefs()
|
ScreenSaverPrefs::ScreenSaverPrefs()
|
||||||
{
|
{
|
||||||
find_directory(B_USER_SETTINGS_DIRECTORY,&fSSPath);
|
BPath path;
|
||||||
find_directory(B_USER_SETTINGS_DIRECTORY,&fNetworkPath);
|
find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
||||||
fSSPath.Append("ScreenSaver_settings",true);
|
|
||||||
fNetworkPath.Append("network",true);
|
fSettingsPath = path;
|
||||||
|
fSettingsPath.Append("ScreenSaver_settings", true);
|
||||||
|
fNetworkPath = path;
|
||||||
|
fNetworkPath.Append("network", true);
|
||||||
|
|
||||||
Defaults();
|
Defaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Load the flattened settings BMessage from disk and parse it.
|
//! Load the flattened settings BMessage from disk and parse it.
|
||||||
bool
|
bool
|
||||||
ScreenSaverPrefs::LoadSettings()
|
ScreenSaverPrefs::LoadSettings()
|
||||||
{
|
{
|
||||||
BFile ssSettings(fSSPath.Path(),B_READ_ONLY);
|
BFile file(fSettingsPath.Path(), B_READ_ONLY);
|
||||||
if (B_OK==ssSettings.InitCheck()) { // File exists. Unflatten the message and call the settings parser.
|
if (file.InitCheck() != B_OK)
|
||||||
if (fSettings.Unflatten(&ssSettings)!=B_OK)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
PRINT_OBJECT(fSettings);
|
|
||||||
|
|
||||||
fSettings.FindRect("windowframe", &fWindowFrame);
|
|
||||||
fSettings.FindInt32("windowtab", &fWindowTab);
|
|
||||||
fSettings.FindInt32("timeflags", &fTimeFlags);
|
|
||||||
|
|
||||||
int32 blank_time, standByTime, suspendTime, offTime, passwordTime;
|
|
||||||
if (fSettings.FindInt32("timefade", &blank_time) == B_OK)
|
|
||||||
fBlankTime = blank_time * 1000000LL;
|
|
||||||
if (fSettings.FindInt32("timestandby", &standByTime) == B_OK)
|
|
||||||
fStandByTime = standByTime * 1000000LL;
|
|
||||||
if (fSettings.FindInt32("timesuspend", &suspendTime) == B_OK)
|
|
||||||
fSuspendTime = suspendTime * 1000000LL;
|
|
||||||
if (fSettings.FindInt32("timeoff", &offTime) == B_OK)
|
|
||||||
fOffTime = offTime * 1000000LL;
|
|
||||||
fSettings.FindInt32("cornernow", (int32*)&fBlankCorner);
|
|
||||||
fSettings.FindInt32("cornernever", (int32*)&fNeverBlankCorner);
|
|
||||||
fSettings.FindBool("lockenable", &fLockEnabled);
|
|
||||||
if (fSettings.FindInt32("lockdelay", &passwordTime) == B_OK)
|
|
||||||
fPasswordTime = passwordTime * 1000000LL;
|
|
||||||
fSettings.FindString("lockpassword", &fPassword);
|
|
||||||
fSettings.FindString("lockmethod", &fLockMethod);
|
|
||||||
fSettings.FindString("modulename", &fModuleName);
|
|
||||||
|
|
||||||
if (IsNetworkPassword()) {
|
|
||||||
FILE *networkFile=NULL;
|
|
||||||
char buffer[512],*start;
|
|
||||||
// This ugly piece opens the networking file and reads the password, if it exists.
|
|
||||||
if ((networkFile=fopen(fNetworkPath.Path(),"r")))
|
|
||||||
while (buffer==fgets(buffer,512,networkFile))
|
|
||||||
if ((start=strstr(buffer,"PASSWORD = "))) {
|
|
||||||
char password[14];
|
|
||||||
strncpy(password, start+11,strlen(start+11)-1);
|
|
||||||
password[strlen(start+11)-1] = 0;
|
|
||||||
fPassword = password;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// File exists. Unflatten the message and call the settings parser.
|
||||||
|
if (fSettings.Unflatten(&file) != B_OK)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
PRINT_OBJECT(fSettings);
|
||||||
|
|
||||||
|
fSettings.FindRect("windowframe", &fWindowFrame);
|
||||||
|
fSettings.FindInt32("windowtab", &fWindowTab);
|
||||||
|
fSettings.FindInt32("timeflags", &fTimeFlags);
|
||||||
|
|
||||||
|
int32 blank_time, standByTime, suspendTime, offTime, passwordTime;
|
||||||
|
if (fSettings.FindInt32("timefade", &blank_time) == B_OK)
|
||||||
|
fBlankTime = blank_time * 1000000LL;
|
||||||
|
if (fSettings.FindInt32("timestandby", &standByTime) == B_OK)
|
||||||
|
fStandByTime = standByTime * 1000000LL;
|
||||||
|
if (fSettings.FindInt32("timesuspend", &suspendTime) == B_OK)
|
||||||
|
fSuspendTime = suspendTime * 1000000LL;
|
||||||
|
if (fSettings.FindInt32("timeoff", &offTime) == B_OK)
|
||||||
|
fOffTime = offTime * 1000000LL;
|
||||||
|
fSettings.FindInt32("cornernow", (int32*)&fBlankCorner);
|
||||||
|
fSettings.FindInt32("cornernever", (int32*)&fNeverBlankCorner);
|
||||||
|
fSettings.FindBool("lockenable", &fLockEnabled);
|
||||||
|
if (fSettings.FindInt32("lockdelay", &passwordTime) == B_OK)
|
||||||
|
fPasswordTime = passwordTime * 1000000LL;
|
||||||
|
fSettings.FindString("lockpassword", &fPassword);
|
||||||
|
fSettings.FindString("lockmethod", &fLockMethod);
|
||||||
|
fSettings.FindString("modulename", &fModuleName);
|
||||||
|
|
||||||
|
if (IsNetworkPassword()) {
|
||||||
|
FILE *networkFile = NULL;
|
||||||
|
char buffer[512], *start;
|
||||||
|
// This ugly piece opens the networking file and reads the password, if it exists.
|
||||||
|
if ((networkFile = fopen(fNetworkPath.Path(),"r")))
|
||||||
|
while (fgets(buffer, 512, networkFile) != NULL) {
|
||||||
|
if ((start = strstr(buffer,"PASSWORD = ")) != NULL) {
|
||||||
|
char password[14];
|
||||||
|
strncpy(password, start+11,strlen(start+11)-1);
|
||||||
|
password[strlen(start+11)-1] = 0;
|
||||||
|
fPassword = password;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -85,7 +95,7 @@ ScreenSaverPrefs::Defaults()
|
||||||
{
|
{
|
||||||
fWindowFrame = BRect(96.5, 77.0, 542.5, 402);
|
fWindowFrame = BRect(96.5, 77.0, 542.5, 402);
|
||||||
fWindowTab = 0;
|
fWindowTab = 0;
|
||||||
fTimeFlags = 0;
|
fTimeFlags = SAVER_DISABLED;
|
||||||
fBlankTime = 120*1000000LL;
|
fBlankTime = 120*1000000LL;
|
||||||
fStandByTime = 120*1000000LL;
|
fStandByTime = 120*1000000LL;
|
||||||
fSuspendTime = 120*1000000LL;
|
fSuspendTime = 120*1000000LL;
|
||||||
|
@ -103,38 +113,41 @@ ScreenSaverPrefs::Defaults()
|
||||||
BMessage &
|
BMessage &
|
||||||
ScreenSaverPrefs::GetSettings()
|
ScreenSaverPrefs::GetSettings()
|
||||||
{
|
{
|
||||||
fSettings.RemoveName("windowframe");
|
// We can't just empty the message, because the module states are stored
|
||||||
fSettings.RemoveName("windowtab");
|
// in this message as well.
|
||||||
fSettings.RemoveName("timeflags");
|
|
||||||
fSettings.RemoveName("timefade");
|
if (fSettings.ReplaceRect("windowframe", fWindowFrame) != B_OK)
|
||||||
fSettings.RemoveName("timestandby");
|
fSettings.AddRect("windowframe", fWindowFrame);
|
||||||
fSettings.RemoveName("timesuspend");
|
if (fSettings.ReplaceInt32("windowtab", fWindowTab) != B_OK)
|
||||||
fSettings.RemoveName("timeoff");
|
fSettings.AddInt32("windowtab", fWindowTab);
|
||||||
fSettings.RemoveName("cornernow");
|
if (fSettings.ReplaceInt32("timeflags", fTimeFlags) != B_OK)
|
||||||
fSettings.RemoveName("cornernever");
|
fSettings.AddInt32("timeflags", fTimeFlags);
|
||||||
fSettings.RemoveName("lockenable");
|
if (fSettings.ReplaceInt32("timefade", fBlankTime / 1000000LL) != B_OK)
|
||||||
fSettings.RemoveName("lockdelay");
|
fSettings.AddInt32("timefade", fBlankTime / 1000000LL);
|
||||||
fSettings.RemoveName("lockpassword");
|
if (fSettings.ReplaceInt32("timestandby", fStandByTime / 1000000LL) != B_OK)
|
||||||
fSettings.RemoveName("lockmethod");
|
fSettings.AddInt32("timestandby", fStandByTime / 1000000LL);
|
||||||
fSettings.RemoveName("modulename");
|
if (fSettings.ReplaceInt32("timesuspend", fSuspendTime / 1000000LL) != B_OK)
|
||||||
fSettings.AddRect("windowframe", fWindowFrame);
|
fSettings.AddInt32("timesuspend", fSuspendTime / 1000000LL);
|
||||||
fSettings.AddInt32("windowtab", fWindowTab);
|
if (fSettings.ReplaceInt32("timeoff", fOffTime / 1000000LL) != B_OK)
|
||||||
fSettings.AddInt32("timeflags", fTimeFlags);
|
fSettings.AddInt32("timeoff", fOffTime / 1000000LL);
|
||||||
fSettings.AddInt32("timefade", fBlankTime/1000000);
|
if (fSettings.ReplaceInt32("cornernow", fBlankCorner) != B_OK)
|
||||||
fSettings.AddInt32("timestandby", fStandByTime/1000000);
|
fSettings.AddInt32("cornernow", fBlankCorner);
|
||||||
fSettings.AddInt32("timesuspend", fSuspendTime/1000000);
|
if (fSettings.ReplaceInt32("cornernever", fNeverBlankCorner) != B_OK)
|
||||||
fSettings.AddInt32("timeoff", fOffTime/1000000);
|
fSettings.AddInt32("cornernever", fNeverBlankCorner);
|
||||||
fSettings.AddInt32("cornernow", fBlankCorner);
|
if (fSettings.ReplaceBool("lockenable", fLockEnabled) != B_OK)
|
||||||
fSettings.AddInt32("cornernever", fNeverBlankCorner);
|
fSettings.AddBool("lockenable", fLockEnabled);
|
||||||
fSettings.AddBool("lockenable", fLockEnabled);
|
if (fSettings.ReplaceInt32("lockdelay", fPasswordTime / 1000000LL) != B_OK)
|
||||||
fSettings.AddInt32("lockdelay", fPasswordTime/1000000);
|
fSettings.AddInt32("lockdelay", fPasswordTime / 1000000LL);
|
||||||
if (IsNetworkPassword())
|
if (fSettings.ReplaceString("lockmethod", fLockMethod) != B_OK)
|
||||||
fSettings.AddString("lockpassword", "");
|
fSettings.AddString("lockmethod", fLockMethod);
|
||||||
else
|
|
||||||
fSettings.AddString("lockpassword", fPassword);
|
const char* password = IsNetworkPassword() ? "" : fPassword.String();
|
||||||
fSettings.AddString("lockmethod", fLockMethod);
|
if (fSettings.ReplaceString("lockpassword", password) != B_OK)
|
||||||
fSettings.AddString("modulename", fModuleName);
|
fSettings.AddString("lockpassword", password);
|
||||||
|
|
||||||
|
if (fSettings.ReplaceString("modulename", fModuleName) != B_OK)
|
||||||
|
fSettings.AddString("modulename", fModuleName);
|
||||||
|
|
||||||
return fSettings;
|
return fSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,8 +176,8 @@ ScreenSaverPrefs::SaveSettings()
|
||||||
{
|
{
|
||||||
BMessage &settings = GetSettings();
|
BMessage &settings = GetSettings();
|
||||||
PRINT_OBJECT(settings);
|
PRINT_OBJECT(settings);
|
||||||
BFile file(fSSPath.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
BFile file(fSettingsPath.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
if ((file.InitCheck()!=B_OK) || (settings.Flatten(&file)!=B_OK))
|
if (file.InitCheck() != B_OK || settings.Flatten(&file) != B_OK)
|
||||||
fprintf(stderr, "Problem while saving screensaver preferences file!\n");
|
fprintf(stderr, "Problem while saving screensaver preferences file!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,227 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2003-2006, Haiku.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Michael Phipps
|
||||||
|
* Jérôme Duval, jerome.duval@free.fr
|
||||||
|
* Axel Dörfler, axeld@pinc-software.de
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ScreenSaverRunner.h"
|
||||||
|
#include "ScreenSaverPrefs.h"
|
||||||
|
|
||||||
|
#include <FindDirectory.h>
|
||||||
|
#include <Screen.h>
|
||||||
|
#include <ScreenSaver.h>
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
ScreenSaverRunner::ScreenSaverRunner(BWindow* window, BView* view,
|
||||||
|
bool preview, ScreenSaverPrefs& prefs)
|
||||||
|
:
|
||||||
|
fSaver(NULL),
|
||||||
|
fWindow(window),
|
||||||
|
fView(view),
|
||||||
|
fPrefs(prefs),
|
||||||
|
fPreview(preview),
|
||||||
|
fAddonImage(-1),
|
||||||
|
fThread(-1),
|
||||||
|
fQuitting(false)
|
||||||
|
{
|
||||||
|
fDirectWindow = dynamic_cast<BDirectWindow *>(fWindow);
|
||||||
|
_LoadAddOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ScreenSaverRunner::~ScreenSaverRunner()
|
||||||
|
{
|
||||||
|
if (!fQuitting)
|
||||||
|
Quit();
|
||||||
|
|
||||||
|
_CleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BScreenSaver*
|
||||||
|
ScreenSaverRunner::ScreenSaver() const
|
||||||
|
{
|
||||||
|
return fSaver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
ScreenSaverRunner::HasStarted() const
|
||||||
|
{
|
||||||
|
return fHasStarted;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ScreenSaverRunner::Run()
|
||||||
|
{
|
||||||
|
fThread = spawn_thread(&_ThreadFunc, "ScreenSaverRenderer", B_LOW_PRIORITY, this);
|
||||||
|
Resume();
|
||||||
|
|
||||||
|
return fThread >= B_OK ? B_OK : fThread;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::Quit()
|
||||||
|
{
|
||||||
|
fQuitting = true;
|
||||||
|
Resume();
|
||||||
|
|
||||||
|
if (fThread >= 0) {
|
||||||
|
status_t returnValue;
|
||||||
|
wait_for_thread(fThread, &returnValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::Suspend()
|
||||||
|
{
|
||||||
|
suspend_thread(fThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::Resume()
|
||||||
|
{
|
||||||
|
resume_thread(fThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::_LoadAddOn()
|
||||||
|
{
|
||||||
|
// This is a new set of preferences. Free up what we did have
|
||||||
|
// TODO: this is currently not meant to be used after creation
|
||||||
|
if (fThread >= B_OK) {
|
||||||
|
Suspend();
|
||||||
|
if (fSaver != NULL)
|
||||||
|
fSaver->StopSaver();
|
||||||
|
}
|
||||||
|
_CleanUp();
|
||||||
|
|
||||||
|
if (!strcmp("", fPrefs.ModuleName())) {
|
||||||
|
Resume();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BScreenSaver* (*instantiate)(BMessage*, image_id);
|
||||||
|
|
||||||
|
// try all directories until the first one succeeds
|
||||||
|
|
||||||
|
directory_which which[] = {B_BEOS_ADDONS_DIRECTORY, B_COMMON_ADDONS_DIRECTORY,
|
||||||
|
B_USER_ADDONS_DIRECTORY};
|
||||||
|
BPath path;
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < sizeof(which) / sizeof(which[0]); i++) {
|
||||||
|
if (find_directory(which[i], &path, false) != B_OK)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
path.Append("Screen Savers");
|
||||||
|
path.Append(fPrefs.ModuleName());
|
||||||
|
|
||||||
|
fAddonImage = load_add_on(path.Path());
|
||||||
|
if (fAddonImage >= B_OK)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fAddonImage < B_OK) {
|
||||||
|
printf("Unable to open add-on: %s: %s\n", path.Path(), strerror(fAddonImage));
|
||||||
|
} else {
|
||||||
|
// Look for the one C function that should exist.
|
||||||
|
if (get_image_symbol(fAddonImage, "instantiate_screen_saver",
|
||||||
|
B_SYMBOL_TYPE_TEXT, (void **)&instantiate) != B_OK) {
|
||||||
|
printf("Unable to find the instantiator\n");
|
||||||
|
} else {
|
||||||
|
BMessage state;
|
||||||
|
fPrefs.GetState(fPrefs.ModuleName(), &state);
|
||||||
|
fSaver = instantiate(&state, fAddonImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fSaver->InitCheck() != B_OK) {
|
||||||
|
printf("ScreenSaver initialization failed: %s!\n", strerror(fSaver->InitCheck()));
|
||||||
|
_CleanUp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::_CleanUp()
|
||||||
|
{
|
||||||
|
delete fSaver;
|
||||||
|
fSaver = NULL;
|
||||||
|
|
||||||
|
if (fAddonImage >= 0) {
|
||||||
|
unload_add_on(fAddonImage);
|
||||||
|
fAddonImage = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverRunner::_Run()
|
||||||
|
{
|
||||||
|
if (fWindow->Lock()) {
|
||||||
|
fView->SetViewColor(0, 0, 0);
|
||||||
|
fView->SetLowColor(0, 0, 0);
|
||||||
|
if (fSaver)
|
||||||
|
fHasStarted = fSaver->StartSaver(fView, fPreview) == B_OK;
|
||||||
|
fWindow->Unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 snoozeCount = 0;
|
||||||
|
int32 frame = 0;
|
||||||
|
|
||||||
|
while (!fQuitting) {
|
||||||
|
bigtime_t tick = fSaver ? fSaver->TickSize() : 50000;
|
||||||
|
snooze(tick);
|
||||||
|
|
||||||
|
if (snoozeCount) {
|
||||||
|
// if we are sleeping, do nothing
|
||||||
|
snoozeCount--;
|
||||||
|
} else if (fSaver != NULL && fHasStarted) {
|
||||||
|
if (fSaver->LoopOnCount() && frame >= fSaver->LoopOnCount()) {
|
||||||
|
// Time to nap
|
||||||
|
frame = 0;
|
||||||
|
snoozeCount = fSaver->LoopOffCount();
|
||||||
|
} else if (fWindow->LockWithTimeout(5000LL) == B_OK) {
|
||||||
|
if (!fQuitting) {
|
||||||
|
// NOTE: R5 really calls DirectDraw()
|
||||||
|
// and then Draw() for the same frame
|
||||||
|
if (fDirectWindow)
|
||||||
|
fSaver->DirectDraw(frame);
|
||||||
|
fSaver->Draw(fView, frame);
|
||||||
|
fView->Sync();
|
||||||
|
frame++;
|
||||||
|
}
|
||||||
|
fWindow->Unlock();
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
snoozeCount = 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fSaver)
|
||||||
|
fSaver->StopSaver();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ScreenSaverRunner::_ThreadFunc(void *data)
|
||||||
|
{
|
||||||
|
ScreenSaverRunner* runner = (ScreenSaverRunner*)data;
|
||||||
|
runner->_Run();
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2003-2005, Haiku.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Michael Phipps
|
|
||||||
* Jérôme Duval, jerome.duval@free.fr
|
|
||||||
*/
|
|
||||||
#include <FindDirectory.h>
|
|
||||||
#include <Screen.h>
|
|
||||||
#include <ScreenSaver.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "ScreenSaverThread.h"
|
|
||||||
#include "ScreenSaverPrefs.h"
|
|
||||||
|
|
||||||
int32
|
|
||||||
ScreenSaverThread::ThreadFunc(void *data)
|
|
||||||
{
|
|
||||||
ScreenSaverThread* ss = (ScreenSaverThread*)data;
|
|
||||||
ss->Thread();
|
|
||||||
return B_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ScreenSaverThread::ScreenSaverThread(BWindow* window,
|
|
||||||
BView* view,
|
|
||||||
ScreenSaverPrefs* prefs)
|
|
||||||
: fSaver(NULL),
|
|
||||||
fWin(window),
|
|
||||||
fView(view),
|
|
||||||
fPref(prefs),
|
|
||||||
fFrame(0),
|
|
||||||
fSnoozeCount(0),
|
|
||||||
fAddonImage(-1),
|
|
||||||
|
|
||||||
fQuitting(false)
|
|
||||||
{
|
|
||||||
fDWin = dynamic_cast<BDirectWindow *>(fWin);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ScreenSaverThread::~ScreenSaverThread()
|
|
||||||
{
|
|
||||||
_CleanUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ScreenSaverThread::Quit(thread_id id)
|
|
||||||
{
|
|
||||||
fQuitting = true;
|
|
||||||
if (id >= 0) {
|
|
||||||
status_t threadRetValue;
|
|
||||||
wait_for_thread(id, &threadRetValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fSaver)
|
|
||||||
fSaver->StopSaver();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ScreenSaverThread::Thread()
|
|
||||||
{
|
|
||||||
if (fWin->Lock()) {
|
|
||||||
fView->SetViewColor(0,0,0);
|
|
||||||
fView->SetLowColor(0,0,0);
|
|
||||||
if (fSaver)
|
|
||||||
fSaver->StartSaver(fView, false);
|
|
||||||
fWin->Unlock();
|
|
||||||
}
|
|
||||||
while (!fQuitting) {
|
|
||||||
snooze(fSaver->TickSize());
|
|
||||||
if (fSnoozeCount) {
|
|
||||||
// if we are sleeping, do nothing
|
|
||||||
fSnoozeCount--;
|
|
||||||
return;
|
|
||||||
} else if (fSaver->LoopOnCount() && (fFrame >= fSaver->LoopOnCount())) { // Time to nap
|
|
||||||
fFrame = 0;
|
|
||||||
fSnoozeCount = fSaver->LoopOffCount();
|
|
||||||
} else if (fWin->Lock()) {
|
|
||||||
// NOTE: R5 really calls DirectDraw()
|
|
||||||
// and then Draw() for the same frame
|
|
||||||
if (fDWin)
|
|
||||||
fSaver->DirectDraw(fFrame);
|
|
||||||
fSaver->Draw(fView, fFrame);
|
|
||||||
fWin->Unlock();
|
|
||||||
fFrame++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BScreenSaver*
|
|
||||||
ScreenSaverThread::LoadAddOn()
|
|
||||||
{
|
|
||||||
if (strcmp("", fPref->ModuleName()) == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
// This is a new set of preferences. Free up what we did have
|
|
||||||
_CleanUp();
|
|
||||||
|
|
||||||
BScreenSaver* (*instantiate)(BMessage*, image_id);
|
|
||||||
|
|
||||||
char temp[B_PATH_NAME_LENGTH];
|
|
||||||
if (B_OK==find_directory(B_BEOS_ADDONS_DIRECTORY, 0, false, temp, B_PATH_NAME_LENGTH)) {
|
|
||||||
sprintf (temp,"%s/Screen Savers/%s", temp, fPref->ModuleName());
|
|
||||||
fAddonImage = load_add_on(temp);
|
|
||||||
}
|
|
||||||
if (fAddonImage < 0) {
|
|
||||||
//printf ("Unable to open add-on: %s\n",temp);
|
|
||||||
sprintf (temp,"%s/Screen Savers/%s", temp, fPref->ModuleName());
|
|
||||||
if (B_OK==find_directory(B_COMMON_ADDONS_DIRECTORY, 0, false, temp, B_PATH_NAME_LENGTH)) {
|
|
||||||
sprintf (temp,"%s/Screen Savers/%s", temp, fPref->ModuleName());
|
|
||||||
fAddonImage = load_add_on(temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (fAddonImage < 0) {
|
|
||||||
//printf ("Unable to open add-on: %s\n",temp);
|
|
||||||
if (B_OK==find_directory(B_USER_ADDONS_DIRECTORY, 0, false, temp, B_PATH_NAME_LENGTH)) {
|
|
||||||
sprintf (temp,"%s/Screen Savers/%s", temp, fPref->ModuleName());
|
|
||||||
fAddonImage = load_add_on(temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (fAddonImage < 0) {
|
|
||||||
printf ("Unable to open add-on: %s\n",temp);
|
|
||||||
printf ("add on image = %ld!\n", fAddonImage);
|
|
||||||
return NULL;
|
|
||||||
} else {
|
|
||||||
// Look for the one C function that should exist.
|
|
||||||
status_t retVal;
|
|
||||||
if (B_OK != (retVal=get_image_symbol(fAddonImage, "instantiate_screen_saver", B_SYMBOL_TYPE_TEXT,(void **) &instantiate))) {
|
|
||||||
printf ("Unable to find the instantiator\n");
|
|
||||||
printf ("Error = %ld\n",retVal);
|
|
||||||
return NULL;
|
|
||||||
} else {
|
|
||||||
BMessage state;
|
|
||||||
fPref->GetState(fPref->ModuleName(), &state);
|
|
||||||
fSaver = instantiate(&state, fAddonImage);
|
|
||||||
}
|
|
||||||
if (B_OK != fSaver->InitCheck()) {
|
|
||||||
printf ("InitCheck() Failed!\n");
|
|
||||||
unload_add_on(fAddonImage);
|
|
||||||
delete fSaver;
|
|
||||||
fSaver = NULL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fSaver;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ScreenSaverThread::_CleanUp()
|
|
||||||
{
|
|
||||||
delete fSaver;
|
|
||||||
fSaver = NULL;
|
|
||||||
if (fAddonImage >= 0) {
|
|
||||||
unload_add_on(fAddonImage);
|
|
||||||
fAddonImage = -1;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue