diff --git a/headers/private/screen_saver/ScreenSaverRunner.h b/headers/private/screen_saver/ScreenSaverRunner.h index f3f717e98e..2e730b7e59 100644 --- a/headers/private/screen_saver/ScreenSaverRunner.h +++ b/headers/private/screen_saver/ScreenSaverRunner.h @@ -14,13 +14,15 @@ #include #include +#include #include "ScreenSaverSettings.h" class ScreenSaverRunner { public: - ScreenSaverRunner(BView* view, + ScreenSaverRunner(BWindow* window, + BView* view, ScreenSaverSettings& settings); ~ScreenSaverRunner(); @@ -38,6 +40,7 @@ private: static status_t _ThreadFunc(void* data); status_t _Run(); + BWindow* fWindow; BView* fView; bool fIsDirectDraw; ScreenSaverSettings& fSettings; diff --git a/src/bin/screen_blanker/ScreenBlanker.cpp b/src/bin/screen_blanker/ScreenBlanker.cpp index 2b6a43c07e..8a5aee732f 100644 --- a/src/bin/screen_blanker/ScreenBlanker.cpp +++ b/src/bin/screen_blanker/ScreenBlanker.cpp @@ -71,7 +71,7 @@ ScreenBlanker::ReadyToRun() fPasswordWindow = new PasswordWindow(); BView* view = fWindow->ChildAt(0); - fSaverRunner = new ScreenSaverRunner(view, fSettings); + fSaverRunner = new ScreenSaverRunner(fWindow, view, fSettings); fWindow->SetSaverRunner(fSaverRunner); BScreenSaver* saver = fSaverRunner->ScreenSaver(); diff --git a/src/bin/screen_blanker/ScreenSaverWindow.cpp b/src/bin/screen_blanker/ScreenSaverWindow.cpp index 60a2d7ae22..f617066e3f 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.cpp +++ b/src/bin/screen_blanker/ScreenSaverWindow.cpp @@ -89,7 +89,8 @@ ScreenSaverWindow::ScreenSaverWindow(BRect frame) fFilter(NULL) { frame.OffsetTo(0, 0); - fTopView = new BView(frame, "ScreenSaver View", B_FOLLOW_ALL, B_WILL_DRAW); + fTopView = new BView(frame, "ScreenSaver View", B_FOLLOW_ALL, + B_WILL_DRAW); fTopView->SetViewColor(B_TRANSPARENT_COLOR); fFilter = new ScreenSaverFilter(); diff --git a/src/kits/screensaver/ScreenSaverRunner.cpp b/src/kits/screensaver/ScreenSaverRunner.cpp index 799ac65df8..024c28e6d8 100644 --- a/src/kits/screensaver/ScreenSaverRunner.cpp +++ b/src/kits/screensaver/ScreenSaverRunner.cpp @@ -20,12 +20,12 @@ #include -ScreenSaverRunner::ScreenSaverRunner(BView* view, +ScreenSaverRunner::ScreenSaverRunner(BWindow* window, BView* view, ScreenSaverSettings& settings) : + fWindow(window), fView(view), - fIsDirectDraw(view != NULL - && dynamic_cast(view->Window()) != NULL), + fIsDirectDraw(dynamic_cast(window) != NULL), fSettings(settings), fSaver(NULL), fAddonImage(-1), @@ -168,14 +168,6 @@ ScreenSaverRunner::_Run() { static const uint32 kInitialTickRate = 50000; - if (fView == NULL || fView->Window() == NULL) { - // view is NULL or not connected to app server, bail out - if (fSaver != NULL) - fSaver->StopSaver(); - - return B_BAD_VALUE; - } - // TODO: This code is getting awfully complicated and should // probably be refactored. uint32 tickBase = kInitialTickRate; @@ -203,8 +195,10 @@ ScreenSaverRunner::_Run() if (tick < 0) tick = 0; tickBase = tick; - } else if (tickBase < kInitialTickRate && tick >= kInitialTickRate) + } else if (tickBase < kInitialTickRate + && tick >= kInitialTickRate) { tickBase = kInitialTickRate; + } lastTickTime = system_time(); } @@ -217,7 +211,7 @@ ScreenSaverRunner::_Run() // Time to nap frame = 0; snoozeCount = fSaver->LoopOffCount(); - } else if (fView->Window()->LockWithTimeout(5000LL) == B_OK) { + } else if (fWindow->LockWithTimeout(5000LL) == B_OK) { if (!fQuitting) { // NOTE: BeOS R5 really calls DirectDraw() // and then Draw() for the same frame @@ -227,7 +221,7 @@ ScreenSaverRunner::_Run() fView->Sync(); frame++; } - fView->Window()->Unlock(); + fWindow->Unlock(); } } else snoozeCount = 1000; diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index 1762907d2e..e3ae4aefad 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -810,7 +810,7 @@ ModulesView::_OpenSaver() BView* view = fPreviewView->AddPreview(); fCurrentName = fSettings.ModuleName(); - fSaverRunner = new ScreenSaverRunner(view, fSettings); + fSaverRunner = new ScreenSaverRunner(view->Window(), view, fSettings); #ifdef __HAIKU__ BRect rect = fSettingsBox->InnerFrame().InsetByCopy(4, 4);