hrev48481 adds 1 changeset to branch 'master' old head: 75fe62cd00c0a15c0cfc4eb9fc220547007ca683 new head: e4e2ce4ce38546193ddab428b32a654447a07e19 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=e4e2ce4+%5E75fe62c ---------------------------------------------------------------------------- e4e2ce4: When testing screensaver, don't have mouse move exit the screen saver. Fixes #7463 Signed-off-by: Adrien Destugues <pulkomandy@xxxxxxxxx> [ Puck Meerburg <puck@xxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev48481 Commit: e4e2ce4ce38546193ddab428b32a654447a07e19 URL: http://cgit.haiku-os.org/haiku/commit/?id=e4e2ce4 Author: Puck Meerburg <puck@xxxxxxxxxxxxx> Date: Tue Dec 9 22:43:01 2014 UTC Committer: Adrien Destugues <pulkomandy@xxxxxxxxx> Commit-Date: Wed Dec 10 20:18:30 2014 UTC Ticket: https://dev.haiku-os.org/ticket/7463 ---------------------------------------------------------------------------- 6 files changed, 52 insertions(+), 23 deletions(-) headers/private/screen_saver/ScreenSaverShared.h | 13 +++++++++ src/bin/screen_blanker/ScreenBlanker.cpp | 11 ++++++-- src/bin/screen_blanker/ScreenBlanker.h | 4 ++- src/bin/screen_blanker/ScreenSaverWindow.cpp | 29 +++++++++++--------- src/bin/screen_blanker/ScreenSaverWindow.h | 9 ++++-- .../screensaver/ScreenSaverWindow.cpp | 9 +++--- ---------------------------------------------------------------------------- diff --git a/headers/private/screen_saver/ScreenSaverShared.h b/headers/private/screen_saver/ScreenSaverShared.h new file mode 100644 index 0000000..98a86c5 --- /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@xxxxxxxxxxxxx + */ +#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 83fdc6a..87d387a 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@xxxxxxxxx * Michael Phipps * John Scipione, jscipione@xxxxxxxxx + * Puck Meerburg, puck@xxxxxxxxxxxxx */ @@ -27,6 +28,7 @@ #include <string.h> #include <syslog.h> +#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 b190e73..6cb29d9 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@xxxxxxx * Michael Phipps * John Scipione, jscipione@xxxxxxxxx + * Puck Meerburg, puck@xxxxxxxxxxxxx */ #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 27ec307..c10e2e9 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@xxxxxxx * Ryan Leavengood, leavengood@xxxxxxxxx + * Puck Meerburg, puck@xxxxxxxxxxxxx */ @@ -30,22 +31,24 @@ 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_KEY_DOWN: + case B_MOUSE_MOVED: { - // we ignore the Print-Screen key to make screen shots of - // screen savers possible - int32 key; - if (message->FindInt32("key", &key) == B_OK && key == 0xe) + // 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_MOUSE_MOVED: + case B_KEY_DOWN: { - // ignore the initial B_MOUSE_MOVED sent by the app_server - bool transitOnly = false; - if (message->FindBool("be:transit_only", &transitOnly) == B_OK - && transitOnly) + // we ignore the Print-Screen key to make screen shots of + // screen savers possible + int32 key; + if (message->FindInt32("key", &key) == B_OK && key == 0xe) return B_DISPATCH_MESSAGE; // Fall through @@ -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 0151a9e..7ad6dda 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 96eef35..5dfa4dd 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -7,6 +7,7 @@ * Jérôme Duval, jerome.duval@xxxxxxx * Michael Phipps * John Scipione, jscipione@xxxxxxxxx + * Puck Meerburg, puck@xxxxxxxxxxxxx */ @@ -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;