diff --git a/headers/private/screen_saver/ScreenSaverShared.h b/headers/private/screen_saver/ScreenSaverShared.h new file mode 100644 index 0000000000..98a86c524e --- /dev/null +++ b/headers/private/screen_saver/ScreenSaverShared.h @@ -0,0 +1,13 @@ +/* + * Copyright 2014 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Puck Meerburg, puck@puckipedia.nl + */ +#ifndef SCREEN_SAVER_SHARED_H +#define SCREEN_SAVER_SHARED_H + +const uint32 kMsgTestSaver = 'TEST'; + +#endif // SCREEN_SAVER_SHARED_H diff --git a/src/bin/screen_blanker/ScreenBlanker.cpp b/src/bin/screen_blanker/ScreenBlanker.cpp index 83fdc6ac24..87d387a9ec 100644 --- a/src/bin/screen_blanker/ScreenBlanker.cpp +++ b/src/bin/screen_blanker/ScreenBlanker.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2013 Haiku, Inc. All rights reserved. + * Copyright 2003-2014 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -8,6 +8,7 @@ * Ryan Leavengood, leavengood@gmail.com * Michael Phipps * John Scipione, jscipione@gmail.com + * Puck Meerburg, puck@puckipedia.nl */ @@ -27,6 +28,7 @@ #include #include +#include "ScreenSaverShared.h" const static uint32 kMsgTurnOffScreen = 'tofs'; const static uint32 kMsgSuspendScreen = 'suss'; @@ -42,6 +44,7 @@ ScreenBlanker::ScreenBlanker() fWindow(NULL), fSaverRunner(NULL), fPasswordWindow(NULL), + fTestSaver(false), fResumeRunner(NULL), fStandByScreenRunner(NULL), fSuspendScreenRunner(NULL), @@ -67,7 +70,7 @@ ScreenBlanker::ReadyToRun() // create a BDirectWindow and start the render thread. // TODO: we need a window per screen... BScreen screen(B_MAIN_SCREEN_ID); - fWindow = new ScreenSaverWindow(screen.Frame()); + fWindow = new ScreenSaverWindow(screen.Frame(), fTestSaver); fPasswordWindow = new PasswordWindow(); BView* view = fWindow->ChildAt(0); @@ -265,6 +268,10 @@ ScreenBlanker::MessageReceived(BMessage* message) _SetDPMSMode(B_DPMS_STAND_BY); break; + case kMsgTestSaver: + fTestSaver = true; + break; + default: BApplication::MessageReceived(message); } diff --git a/src/bin/screen_blanker/ScreenBlanker.h b/src/bin/screen_blanker/ScreenBlanker.h index b190e73772..6cb29d915f 100644 --- a/src/bin/screen_blanker/ScreenBlanker.h +++ b/src/bin/screen_blanker/ScreenBlanker.h @@ -1,11 +1,12 @@ /* - * Copyright 2003-2013 Haiku, Inc. All rights reserved. + * Copyright 2003-2014 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Jérôme Duval, jerome.duval@free.fr * Michael Phipps * John Scipione, jscipione@gmail.com + * Puck Meerburg, puck@puckipedia.nl */ #ifndef SCREEN_SAVER_APP_H #define SCREEN_SAVER_APP_H @@ -50,6 +51,7 @@ private: PasswordWindow* fPasswordWindow; bigtime_t fBlankTime; + bool fTestSaver; BMessageRunner* fResumeRunner; BMessageRunner* fStandByScreenRunner; diff --git a/src/bin/screen_blanker/ScreenSaverWindow.cpp b/src/bin/screen_blanker/ScreenSaverWindow.cpp index 27ec3076c1..c10e2e9230 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.cpp +++ b/src/bin/screen_blanker/ScreenSaverWindow.cpp @@ -1,11 +1,12 @@ /* - * Copyright 2003-2009, Haiku. + * Copyright 2003-2014, Haiku. * Distributed under the terms of the MIT License. * * Authors: * Michael Phipps * Jérôme Duval, jerome.duval@free.fr * Ryan Leavengood, leavengood@gmail.com + * Puck Meerburg, puck@puckipedia.nl */ @@ -30,6 +31,18 @@ ScreenSaverFilter::Filter(BMessage* message, BHandler** target) // This guard is used to avoid sending multiple B_QUIT_REQUESTED messages if (fEnabled) { switch (message->what) { + case B_MOUSE_MOVED: + { + // ignore the initial B_MOUSE_MOVED sent by the app_server + // in test mode, all mouse move events are ignored + bool transitOnly = false; + if (fTestMode + || message->FindBool("be:transit_only", &transitOnly) == B_OK + && transitOnly) + return B_DISPATCH_MESSAGE; + + // Fall through + } case B_KEY_DOWN: { // we ignore the Print-Screen key to make screen shots of @@ -40,16 +53,6 @@ ScreenSaverFilter::Filter(BMessage* message, BHandler** target) // Fall through } - case B_MOUSE_MOVED: - { - // ignore the initial B_MOUSE_MOVED sent by the app_server - bool transitOnly = false; - if (message->FindBool("be:transit_only", &transitOnly) == B_OK - && transitOnly) - return B_DISPATCH_MESSAGE; - - // Fall through - } case B_MODIFIERS_CHANGED: case B_UNMAPPED_KEY_DOWN: case B_MOUSE_DOWN: @@ -80,7 +83,7 @@ ScreenSaverFilter::Filter(BMessage* message, BHandler** target) This is the BDirectWindow subclass that rendering occurs in. A view is added to it so that BView based screensavers will work. */ -ScreenSaverWindow::ScreenSaverWindow(BRect frame) +ScreenSaverWindow::ScreenSaverWindow(BRect frame, bool test) : BDirectWindow(frame, "ScreenSaver Window", B_NO_BORDER_WINDOW_LOOK, kWindowScreenFeel, @@ -95,7 +98,7 @@ ScreenSaverWindow::ScreenSaverWindow(BRect frame) B_WILL_DRAW); fTopView->SetViewColor(B_TRANSPARENT_COLOR); - fFilter = new ScreenSaverFilter(); + fFilter = new ScreenSaverFilter(test); fTopView->AddFilter(fFilter); AddChild(fTopView); diff --git a/src/bin/screen_blanker/ScreenSaverWindow.h b/src/bin/screen_blanker/ScreenSaverWindow.h index 0151a9ed29..7ad6dda956 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.h +++ b/src/bin/screen_blanker/ScreenSaverWindow.h @@ -1,5 +1,6 @@ /* * Copyright 2003, Michael Phipps. All rights reserved. + * Copyright 2014, Puck Meerburg. * Distributed under the terms of the MIT License. */ #ifndef SCREEN_SAVER_WINDOW_H @@ -19,10 +20,11 @@ const static uint32 kMsgEnableFilter = 'eflt'; class ScreenSaverFilter : public BMessageFilter { public: - ScreenSaverFilter() + ScreenSaverFilter(bool test) : BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), - fEnabled(true) {} + fEnabled(true), + fTestMode(test) {} virtual filter_result Filter(BMessage* message, BHandler** target); @@ -31,12 +33,13 @@ public: private: bool fEnabled; + bool fTestMode; }; class ScreenSaverWindow : public BDirectWindow { public: - ScreenSaverWindow(BRect frame); + ScreenSaverWindow(BRect frame, bool test); ~ScreenSaverWindow(); virtual void MessageReceived(BMessage* message); diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index 96eef3520c..5dfa4dd821 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -7,6 +7,7 @@ * Jérôme Duval, jerome.duval@free.fr * Michael Phipps * John Scipione, jscipione@gmail.com + * Puck Meerburg, puck@puckipedia.nl */ @@ -53,7 +54,7 @@ #include "PreviewView.h" #include "ScreenCornerSelector.h" #include "ScreenSaverItem.h" - +#include "ScreenSaverShared.h" #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "ScreenSaver" @@ -64,7 +65,6 @@ const uint32 kMinSettingsWidth = 230; const uint32 kMinSettingsHeight = 120; const int32 kMsgSaverSelected = 'SSEL'; -const int32 kMsgTestSaver = 'TEST'; const int32 kMsgPasswordCheckBox = 'PWCB'; const int32 kMsgRunSliderChanged = 'RSch'; const int32 kMsgRunSliderUpdate = 'RSup'; @@ -639,7 +639,8 @@ ModulesView::MessageReceived(BMessage* message) be_roster->StartWatching(BMessenger(this, Looper()), B_REQUEST_QUIT); - if (be_roster->Launch(SCREEN_BLANKER_SIG, &fSettings.Message(), + BMessage message(kMsgTestSaver); + if (be_roster->Launch(SCREEN_BLANKER_SIG, &message, &fScreenSaverTestTeam) == B_OK) { break; } @@ -656,7 +657,7 @@ ModulesView::MessageReceived(BMessage* message) BEntry entry(path.Path()); entry_ref ref; if (entry.GetRef(&ref) == B_OK) { - be_roster->Launch(&ref, &fSettings.Message(), + be_roster->Launch(&ref, &message, &fScreenSaverTestTeam); } break;