Merge pull request #202 from hex007/move-pstimeout

Fixes screensaver not getting triggered
This commit is contained in:
Jools Wills 2017-08-11 18:23:44 +01:00 committed by GitHub
commit 5b5eb87115
9 changed files with 65 additions and 37 deletions

View file

@ -59,8 +59,10 @@ void SystemScreenSaver::startScreenSaver()
{ {
if (!mVideoScreensaver && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) if (!mVideoScreensaver && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video"))
{ {
// Configure to fade out the windows // Configure to fade out the windows, Skip Fading if Instant mode
mState = STATE_FADE_OUT_WINDOW; mState = PowerSaver::getMode() == PowerSaver::INSTANT
? STATE_SCREENSAVER_ACTIVE
: STATE_FADE_OUT_WINDOW;
mOpacity = 0.0f; mOpacity = 0.0f;
// Load a random video // Load a random video
@ -316,9 +318,9 @@ void SystemScreenSaver::launchGame()
// launching Game // launching Game
ViewController::get()->goToGameList(mCurrentGame->getSystem()); ViewController::get()->goToGameList(mCurrentGame->getSystem());
IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get();
view->setCursor(mCurrentGame); view->setCursor(mCurrentGame);
if (Settings::getInstance()->getBool("ScreenSaverControls")) if (Settings::getInstance()->getBool("ScreenSaverControls"))
{ {
view->launch(mCurrentGame); view->launch(mCurrentGame);
} }
} }

View file

@ -15,7 +15,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::
mSearchParams(params), mSearchParams(params),
mClose(false) mClose(false)
{ {
PowerSaver::setState(false); PowerSaver::pause();
addChild(&mBox); addChild(&mBox);
addChild(&mGrid); addChild(&mGrid);
@ -98,7 +98,7 @@ bool GuiGameScraper::input(InputConfig* config, Input input)
{ {
if(config->isMappedTo("b", input) && input.value) if(config->isMappedTo("b", input) && input.value)
{ {
PowerSaver::setState(true); PowerSaver::resume();
delete this; delete this;
return true; return true;
} }

View file

@ -19,10 +19,10 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue<ScraperSearchP
{ {
assert(mSearchQueue.size()); assert(mSearchQueue.size());
PowerSaver::setState(false);
addChild(&mBackground); addChild(&mBackground);
addChild(&mGrid); addChild(&mGrid);
PowerSaver::pause();
mIsProcessing = true; mIsProcessing = true;
mTotalGames = mSearchQueue.size(); mTotalGames = mSearchQueue.size();
@ -95,7 +95,6 @@ void GuiScraperMulti::doNextSearch()
{ {
if(mSearchQueue.empty()) if(mSearchQueue.empty())
{ {
PowerSaver::setState(true);
finish(); finish();
return; return;
} }
@ -150,6 +149,7 @@ void GuiScraperMulti::finish()
"OK", [&] { delete this; })); "OK", [&] { delete this; }));
mIsProcessing = false; mIsProcessing = false;
PowerSaver::resume();
} }
std::vector<HelpPrompt> GuiScraperMulti::getHelpPrompts() std::vector<HelpPrompt> GuiScraperMulti::getHelpPrompts()

View file

@ -335,7 +335,7 @@ int main(int argc, char* argv[])
} }
} while(SDL_PollEvent(&event)); } while(SDL_PollEvent(&event));
// triggered if exiting from SDL_WaitEvent // triggered if exiting from SDL_WaitEvent due to event
if (ps_standby) if (ps_standby)
// show as if continuing from last event // show as if continuing from last event
lastTime = SDL_GetTicks(); lastTime = SDL_GetTicks();
@ -343,6 +343,12 @@ int main(int argc, char* argv[])
// reset counter // reset counter
ps_time = SDL_GetTicks(); ps_time = SDL_GetTicks();
} }
else if (ps_standby)
{
// If exitting SDL_WaitEventTimeout due to timeout. Trail considering
// timeout as an event
ps_time = SDL_GetTicks();
}
if(window.isSleeping()) if(window.isSleeping())
{ {
@ -355,8 +361,8 @@ int main(int argc, char* argv[])
int deltaTime = curTime - lastTime; int deltaTime = curTime - lastTime;
lastTime = curTime; lastTime = curTime;
// cap deltaTime // cap deltaTime if it ever goes negative
if((deltaTime > PowerSaver::getTimeout() && PowerSaver::getTimeout() > 0) || deltaTime < 0) if(deltaTime < 0)
deltaTime = 1000; deltaTime = 1000;
window.update(deltaTime); window.update(deltaTime);

View file

@ -12,20 +12,20 @@ PowerSaver::mode PowerSaver::mMode = PowerSaver::DISABLED;
void PowerSaver::init() void PowerSaver::init()
{ {
setState(true); setState(true);
updateTimeouts();
updateMode(); updateMode();
} }
int PowerSaver::getTimeout() int PowerSaver::getTimeout()
{ {
// Used only for SDL_WaitEventTimeout. Use `getMode()` for modes.
return mRunningScreenSaver ? mPlayNextTimeout : mScreenSaverTimeout; return mRunningScreenSaver ? mPlayNextTimeout : mScreenSaverTimeout;
} }
void PowerSaver::updateTimeouts() void PowerSaver::updateTimeouts()
{ {
mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime");
mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - 100 : -1; mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1;
mPlayNextTimeout = 30000; mPlayNextTimeout = 30000 - getMode();
} }
PowerSaver::mode PowerSaver::getMode() PowerSaver::mode PowerSaver::getMode()
@ -46,6 +46,7 @@ void PowerSaver::updateMode()
} else { } else {
mMode = DEFAULT; mMode = DEFAULT;
} }
updateTimeouts();
} }
bool PowerSaver::getState() bool PowerSaver::getState()
@ -63,3 +64,8 @@ void PowerSaver::runningScreenSaver(bool state)
{ {
mRunningScreenSaver = state; mRunningScreenSaver = state;
} }
bool PowerSaver::isScreenSaverActive()
{
return mRunningScreenSaver;
}

View file

@ -3,18 +3,32 @@ class PowerSaver
public: public:
enum mode : int { DISABLED = -1, INSTANT = 200, ENHANCED = 3000, DEFAULT = 10000 }; enum mode : int { DISABLED = -1, INSTANT = 200, ENHANCED = 3000, DEFAULT = 10000 };
// Call when you want PS to reload all state and settings
static void init(); static void init();
// Get timeout to wake up from for the next event
static int getTimeout(); static int getTimeout();
// Update currently set timeouts after User changes Timeout settings
static void updateTimeouts(); static void updateTimeouts();
// Use this to check which mode you are in or get the mode timeout
static mode getMode(); static mode getMode();
// Called when user changes mode from Settings
static void updateMode(); static void updateMode();
// Get current state of PS. Not to be confused with Mode
static bool getState(); static bool getState();
// State is used to temporarily pause and resume PS
static void setState(bool state); static void setState(bool state);
// Paired calls when you want to pause PS briefly till you finish animating
// or processing over cycles
static void pause() { setState(false); }
static void resume() { setState(true); }
// This is used by ScreenSaver to let PS know when to switch to SS timeouts
static void runningScreenSaver(bool state); static void runningScreenSaver(bool state);
static bool isScreenSaverActive();
private: private:
static bool mState; static bool mState;

View file

@ -82,7 +82,7 @@ void Settings::setDefaults()
mBoolMap["ScreenSaverControls"] = true; mBoolMap["ScreenSaverControls"] = true;
mStringMap["ScreenSaverGameInfo"] = "never"; mStringMap["ScreenSaverGameInfo"] = "never";
mBoolMap["StretchVideoOnScreenSaver"] = false; mBoolMap["StretchVideoOnScreenSaver"] = false;
mStringMap["PowerSaverMode"] = "default"; mStringMap["PowerSaverMode"] = "disabled";
// This setting only applies to raspberry pi but set it for all platforms so // This setting only applies to raspberry pi but set it for all platforms so
// we don't get a warning if we encounter it on a different platform // we don't get a warning if we encounter it on a different platform

View file

@ -3,6 +3,7 @@
#include "ThemeData.h" #include "ThemeData.h"
#include "Util.h" #include "Util.h"
#include "Window.h" #include "Window.h"
#include "PowerSaver.h"
#ifdef WIN32 #ifdef WIN32
#include <codecvt> #include <codecvt>
#endif #endif
@ -264,7 +265,7 @@ void VideoComponent::startVideoWithDelay()
// Set the video that we are going to be playing so we don't attempt to restart it // Set the video that we are going to be playing so we don't attempt to restart it
mPlayingVideoPath = mVideoPath; mPlayingVideoPath = mVideoPath;
if (mConfig.startDelay == 0) if (mConfig.startDelay == 0 || PowerSaver::getMode() == PowerSaver::INSTANT)
{ {
// No delay. Just start the video // No delay. Just start the video
mStartDelayed = false; mStartDelayed = false;

View file

@ -330,7 +330,7 @@ void VideoVlcComponent::startVideo()
} }
} }
#endif #endif
PowerSaver::setState(false); PowerSaver::pause();
setupContext(); setupContext();
// Setup the media player // Setup the media player
@ -361,12 +361,11 @@ void VideoVlcComponent::stopVideo()
// Release the media player so it stops calling back to us // Release the media player so it stops calling back to us
if (mMediaPlayer) if (mMediaPlayer)
{ {
PowerSaver::setState(true);
libvlc_media_player_stop(mMediaPlayer); libvlc_media_player_stop(mMediaPlayer);
libvlc_media_player_release(mMediaPlayer); libvlc_media_player_release(mMediaPlayer);
libvlc_media_release(mMedia); libvlc_media_release(mMedia);
mMediaPlayer = NULL; mMediaPlayer = NULL;
freeContext(); freeContext();
PowerSaver::resume();
} }
} }