Merge pull request #8613 from jordan-woyak/expose-disable-ss

Config: Expose "DisableScreenSaver" in the UI and default it to true.
This commit is contained in:
Léo Lam 2020-10-20 01:20:24 +02:00 committed by GitHub
commit 8a8dc3db83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 40 additions and 49 deletions

View File

@ -123,7 +123,7 @@ const Info<int> MAIN_RENDER_WINDOW_HEIGHT{{System::Main, "Display", "RenderWindo
const Info<bool> MAIN_RENDER_WINDOW_AUTOSIZE{{System::Main, "Display", "RenderWindowAutoSize"}, const Info<bool> MAIN_RENDER_WINDOW_AUTOSIZE{{System::Main, "Display", "RenderWindowAutoSize"},
false}; false};
const Info<bool> MAIN_KEEP_WINDOW_ON_TOP{{System::Main, "Display", "KeepWindowOnTop"}, false}; const Info<bool> MAIN_KEEP_WINDOW_ON_TOP{{System::Main, "Display", "KeepWindowOnTop"}, false};
const Info<bool> MAIN_DISABLE_SCREENSAVER{{System::Main, "Display", "DisableScreenSaver"}, false}; const Info<bool> MAIN_DISABLE_SCREENSAVER{{System::Main, "Display", "DisableScreenSaver"}, true};
// Main.DSP // Main.DSP

View File

@ -107,6 +107,9 @@ bool PlatformWin32::Init()
ProcessEvents(); ProcessEvents();
} }
if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER))
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);
UpdateWindowPosition(); UpdateWindowPosition();
return true; return true;
} }

View File

@ -737,7 +737,6 @@ void MainWindow::Play(const std::optional<std::string>& savestate_path)
if (selection) if (selection)
{ {
StartGame(selection->GetFilePath(), ScanForSecondDisc::Yes, savestate_path); StartGame(selection->GetFilePath(), ScanForSecondDisc::Yes, savestate_path);
EnableScreenSaver(false);
} }
else else
{ {
@ -745,7 +744,6 @@ void MainWindow::Play(const std::optional<std::string>& savestate_path)
if (!default_path.isEmpty() && QFile::exists(default_path)) if (!default_path.isEmpty() && QFile::exists(default_path))
{ {
StartGame(default_path, ScanForSecondDisc::Yes, savestate_path); StartGame(default_path, ScanForSecondDisc::Yes, savestate_path);
EnableScreenSaver(false);
} }
else else
{ {
@ -776,7 +774,6 @@ void MainWindow::OnStopComplete()
{ {
m_stop_requested = false; m_stop_requested = false;
HideRenderWidget(); HideRenderWidget();
EnableScreenSaver(true);
#ifdef USE_DISCORD_PRESENCE #ifdef USE_DISCORD_PRESENCE
if (!m_netplay_dialog->isVisible()) if (!m_netplay_dialog->isVisible())
Discord::UpdateDiscordPresence(); Discord::UpdateDiscordPresence();
@ -993,13 +990,6 @@ void MainWindow::StartGame(std::unique_ptr<BootParameters>&& parameters)
if (Config::Get(Config::MAIN_FULLSCREEN)) if (Config::Get(Config::MAIN_FULLSCREEN))
m_fullscreen_requested = true; m_fullscreen_requested = true;
#ifdef Q_OS_WIN
// Prevents Windows from sleeping, turning off the display, or idling
EXECUTION_STATE shouldScreenSave =
Config::Get(Config::MAIN_DISABLE_SCREENSAVER) ? ES_DISPLAY_REQUIRED : 0;
SetThreadExecutionState(ES_CONTINUOUS | shouldScreenSave | ES_SYSTEM_REQUIRED);
#endif
} }
void MainWindow::SetFullScreenResolution(bool fullscreen) void MainWindow::SetFullScreenResolution(bool fullscreen)
@ -1304,6 +1294,10 @@ void MainWindow::NetPlayInit()
Discord::InitNetPlayFunctionality(*m_netplay_discord); Discord::InitNetPlayFunctionality(*m_netplay_discord);
m_netplay_discord->Start(); m_netplay_discord->Start();
#endif #endif
connect(&Settings::Instance(), &Settings::ConfigChanged, this,
&MainWindow::UpdateScreenSaverInhibition);
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
&MainWindow::UpdateScreenSaverInhibition);
} }
bool MainWindow::NetPlayJoin() bool MainWindow::NetPlayJoin()
@ -1435,13 +1429,16 @@ void MainWindow::NetPlayQuit()
#endif #endif
} }
void MainWindow::EnableScreenSaver(bool enable) void MainWindow::UpdateScreenSaverInhibition()
{ {
const bool inhibit =
Config::Get(Config::MAIN_DISABLE_SCREENSAVER) && (Core::GetState() == Core::State::Running);
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR
if (GetWindowSystemType() == WindowSystemType::X11) if (GetWindowSystemType() == WindowSystemType::X11)
UICommon::EnableScreenSaver(winId(), enable); UICommon::InhibitScreenSaver(winId(), inhibit);
#else #else
UICommon::EnableScreenSaver(enable); UICommon::InhibitScreenSaver(inhibit);
#endif #endif
} }

View File

@ -182,7 +182,7 @@ private:
QStringList PromptFileNames(); QStringList PromptFileNames();
void EnableScreenSaver(bool enable); void UpdateScreenSaverInhibition();
void OnStopComplete(); void OnStopComplete();
void dragEnterEvent(QDragEnterEvent* event) override; void dragEnterEvent(QDragEnterEvent* event) override;

View File

@ -148,12 +148,14 @@ void InterfacePane::CreateUI()
new QCheckBox(tr("Download Game Covers from GameTDB.com for Use in Grid Mode")); new QCheckBox(tr("Download Game Covers from GameTDB.com for Use in Grid Mode"));
m_checkbox_show_debugging_ui = new QCheckBox(tr("Show Debugging UI")); m_checkbox_show_debugging_ui = new QCheckBox(tr("Show Debugging UI"));
m_checkbox_focused_hotkeys = new QCheckBox(tr("Hotkeys Require Window Focus")); m_checkbox_focused_hotkeys = new QCheckBox(tr("Hotkeys Require Window Focus"));
m_checkbox_disable_screensaver = new QCheckBox(tr("Inhibit Screensaver During Emulation"));
groupbox_layout->addWidget(m_checkbox_use_builtin_title_database); groupbox_layout->addWidget(m_checkbox_use_builtin_title_database);
groupbox_layout->addWidget(m_checkbox_use_userstyle); groupbox_layout->addWidget(m_checkbox_use_userstyle);
groupbox_layout->addWidget(m_checkbox_use_covers); groupbox_layout->addWidget(m_checkbox_use_covers);
groupbox_layout->addWidget(m_checkbox_show_debugging_ui); groupbox_layout->addWidget(m_checkbox_show_debugging_ui);
groupbox_layout->addWidget(m_checkbox_focused_hotkeys); groupbox_layout->addWidget(m_checkbox_focused_hotkeys);
groupbox_layout->addWidget(m_checkbox_disable_screensaver);
} }
void InterfacePane::CreateInGame() void InterfacePane::CreateInGame()
@ -185,6 +187,7 @@ void InterfacePane::ConnectLayout()
connect(m_checkbox_use_builtin_title_database, &QCheckBox::toggled, this, connect(m_checkbox_use_builtin_title_database, &QCheckBox::toggled, this,
&InterfacePane::OnSaveConfig); &InterfacePane::OnSaveConfig);
connect(m_checkbox_use_covers, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig); connect(m_checkbox_use_covers, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig);
connect(m_checkbox_disable_screensaver, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig);
connect(m_checkbox_show_debugging_ui, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig); connect(m_checkbox_show_debugging_ui, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig);
connect(m_checkbox_focused_hotkeys, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig); connect(m_checkbox_focused_hotkeys, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig);
connect(m_combobox_theme, qOverload<int>(&QComboBox::currentIndexChanged), this, connect(m_combobox_theme, qOverload<int>(&QComboBox::currentIndexChanged), this,
@ -237,6 +240,7 @@ void InterfacePane::LoadConfig()
m_checkbox_use_covers->setChecked(Config::Get(Config::MAIN_USE_GAME_COVERS)); m_checkbox_use_covers->setChecked(Config::Get(Config::MAIN_USE_GAME_COVERS));
m_checkbox_focused_hotkeys->setChecked(Config::Get(Config::MAIN_FOCUSED_HOTKEYS)); m_checkbox_focused_hotkeys->setChecked(Config::Get(Config::MAIN_FOCUSED_HOTKEYS));
m_checkbox_hide_mouse->setChecked(Settings::Instance().GetHideCursor()); m_checkbox_hide_mouse->setChecked(Settings::Instance().GetHideCursor());
m_checkbox_disable_screensaver->setChecked(Config::Get(Config::MAIN_DISABLE_SCREENSAVER));
} }
void InterfacePane::OnSaveConfig() void InterfacePane::OnSaveConfig()
@ -280,6 +284,7 @@ void InterfacePane::OnSaveConfig()
} }
Config::SetBase(Config::MAIN_FOCUSED_HOTKEYS, m_checkbox_focused_hotkeys->isChecked()); Config::SetBase(Config::MAIN_FOCUSED_HOTKEYS, m_checkbox_focused_hotkeys->isChecked());
Config::SetBase(Config::MAIN_DISABLE_SCREENSAVER, m_checkbox_disable_screensaver->isChecked());
settings.SaveSettings(); settings.SaveSettings();
} }

View File

@ -37,6 +37,7 @@ private:
QCheckBox* m_checkbox_show_debugging_ui; QCheckBox* m_checkbox_show_debugging_ui;
QCheckBox* m_checkbox_focused_hotkeys; QCheckBox* m_checkbox_focused_hotkeys;
QCheckBox* m_checkbox_use_covers; QCheckBox* m_checkbox_use_covers;
QCheckBox* m_checkbox_disable_screensaver;
QCheckBox* m_checkbox_confirm_on_stop; QCheckBox* m_checkbox_confirm_on_stop;
QCheckBox* m_checkbox_use_panic_handlers; QCheckBox* m_checkbox_use_panic_handlers;

View File

@ -397,57 +397,42 @@ bool TriggerSTMPowerEvent()
} }
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR
void EnableScreenSaver(Window win, bool enable) void InhibitScreenSaver(Window win, bool inhibit)
#else #else
void EnableScreenSaver(bool enable) void InhibitScreenSaver(bool inhibit)
#endif #endif
{ {
// Inhibit the screensaver. Depending on the operating system this may also // Inhibit the screensaver. Depending on the operating system this may also
// disable low-power states and/or screen dimming. // disable low-power states and/or screen dimming.
#if defined(HAVE_X11) && HAVE_X11 #if defined(HAVE_X11) && HAVE_X11
if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER)) X11Utils::InhibitScreensaver(win, inhibit);
{
X11Utils::InhibitScreensaver(win, !enable);
}
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
// Prevents Windows from sleeping, turning off the display, or idling // Prevents Windows from sleeping, turning off the display, or idling
if (enable) SetThreadExecutionState(ES_CONTINUOUS |
{ (inhibit ? (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED) : 0));
SetThreadExecutionState(ES_CONTINUOUS);
}
else
{
EXECUTION_STATE should_screen_save =
Config::Get(Config::MAIN_DISABLE_SCREENSAVER) ? ES_DISPLAY_REQUIRED : 0;
SetThreadExecutionState(ES_CONTINUOUS | should_screen_save | ES_SYSTEM_REQUIRED);
}
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
static IOPMAssertionID s_power_assertion = kIOPMNullAssertionID; static IOPMAssertionID s_power_assertion = kIOPMNullAssertionID;
if (inhibit)
if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER))
{ {
if (enable) CFStringRef reason_for_activity = CFSTR("Emulation Running");
if (IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep,
kIOPMAssertionLevelOn, reason_for_activity,
&s_power_assertion) != kIOReturnSuccess)
{ {
if (s_power_assertion != kIOPMNullAssertionID) s_power_assertion = kIOPMNullAssertionID;
{
IOPMAssertionRelease(s_power_assertion);
s_power_assertion = kIOPMNullAssertionID;
}
} }
else }
else
{
if (s_power_assertion != kIOPMNullAssertionID)
{ {
CFStringRef reason_for_activity = CFSTR("Emulation Running"); IOPMAssertionRelease(s_power_assertion);
if (IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep, s_power_assertion = kIOPMNullAssertionID;
kIOPMAssertionLevelOn, reason_for_activity,
&s_power_assertion) != kIOReturnSuccess)
{
s_power_assertion = kIOPMNullAssertionID;
}
} }
} }
#endif #endif

View File

@ -14,9 +14,9 @@ void Init();
void Shutdown(); void Shutdown();
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR
void EnableScreenSaver(unsigned long win, bool enable); void InhibitScreenSaver(unsigned long win, bool enable);
#else #else
void EnableScreenSaver(bool enable); void InhibitScreenSaver(bool enable);
#endif #endif
// Calls std::locale::global, selecting a fallback locale if the // Calls std::locale::global, selecting a fallback locale if the