When testing screensaver, don't have mouse move exit the screen saver.

Fixes #7463

Signed-off-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
Puck Meerburg 2014-12-09 23:43:01 +01:00 committed by Adrien Destugues
parent 75fe62cd00
commit e4e2ce4ce3
6 changed files with 52 additions and 23 deletions

View File

@ -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

View File

@ -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 <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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;