summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-10-20 01:20:24 +0200
committerGitHub <noreply@github.com>2020-10-20 01:20:24 +0200
commit8a8dc3db83117973874236e4eeba30e467604066 (patch)
tree826ddf47af137a6bb56c05d5fd7121378017c2fe /Source/Core
parent55b49248994e8c595218892c4c34fe119bd6381b (diff)
parent50ec74784052b87dcf3a09d682beae8f1c8c8037 (diff)
Merge pull request #8613 from jordan-woyak/expose-disable-ss
Config: Expose "DisableScreenSaver" in the UI and default it to true.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Config/MainSettings.cpp2
-rw-r--r--Source/Core/DolphinNoGUI/PlatformWin32.cpp3
-rw-r--r--Source/Core/DolphinQt/MainWindow.cpp23
-rw-r--r--Source/Core/DolphinQt/MainWindow.h2
-rw-r--r--Source/Core/DolphinQt/Settings/InterfacePane.cpp5
-rw-r--r--Source/Core/DolphinQt/Settings/InterfacePane.h1
-rw-r--r--Source/Core/UICommon/UICommon.cpp49
-rw-r--r--Source/Core/UICommon/UICommon.h4
8 files changed, 40 insertions, 49 deletions
diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp
index 2365db135f..6715a2a877 100644
--- a/Source/Core/Core/Config/MainSettings.cpp
+++ b/Source/Core/Core/Config/MainSettings.cpp
@@ -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"},
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
diff --git a/Source/Core/DolphinNoGUI/PlatformWin32.cpp b/Source/Core/DolphinNoGUI/PlatformWin32.cpp
index b9331f56ab..75d30b8b2c 100644
--- a/Source/Core/DolphinNoGUI/PlatformWin32.cpp
+++ b/Source/Core/DolphinNoGUI/PlatformWin32.cpp
@@ -107,6 +107,9 @@ bool PlatformWin32::Init()
ProcessEvents();
}
+ if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER))
+ SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);
+
UpdateWindowPosition();
return true;
}
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index 4e654c8b64..9a82a6bb53 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -737,7 +737,6 @@ void MainWindow::Play(const std::optional<std::string>& savestate_path)
if (selection)
{
StartGame(selection->GetFilePath(), ScanForSecondDisc::Yes, savestate_path);
- EnableScreenSaver(false);
}
else
{
@@ -745,7 +744,6 @@ void MainWindow::Play(const std::optional<std::string>& savestate_path)
if (!default_path.isEmpty() && QFile::exists(default_path))
{
StartGame(default_path, ScanForSecondDisc::Yes, savestate_path);
- EnableScreenSaver(false);
}
else
{
@@ -776,7 +774,6 @@ void MainWindow::OnStopComplete()
{
m_stop_requested = false;
HideRenderWidget();
- EnableScreenSaver(true);
#ifdef USE_DISCORD_PRESENCE
if (!m_netplay_dialog->isVisible())
Discord::UpdateDiscordPresence();
@@ -993,13 +990,6 @@ void MainWindow::StartGame(std::unique_ptr<BootParameters>&& parameters)
if (Config::Get(Config::MAIN_FULLSCREEN))
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)
@@ -1304,6 +1294,10 @@ void MainWindow::NetPlayInit()
Discord::InitNetPlayFunctionality(*m_netplay_discord);
m_netplay_discord->Start();
#endif
+ connect(&Settings::Instance(), &Settings::ConfigChanged, this,
+ &MainWindow::UpdateScreenSaverInhibition);
+ connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
+ &MainWindow::UpdateScreenSaverInhibition);
}
bool MainWindow::NetPlayJoin()
@@ -1435,13 +1429,16 @@ void MainWindow::NetPlayQuit()
#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 (GetWindowSystemType() == WindowSystemType::X11)
- UICommon::EnableScreenSaver(winId(), enable);
+ UICommon::InhibitScreenSaver(winId(), inhibit);
#else
- UICommon::EnableScreenSaver(enable);
+ UICommon::InhibitScreenSaver(inhibit);
#endif
}
diff --git a/Source/Core/DolphinQt/MainWindow.h b/Source/Core/DolphinQt/MainWindow.h
index 4a1c4833fd..77fea6839f 100644
--- a/Source/Core/DolphinQt/MainWindow.h
+++ b/Source/Core/DolphinQt/MainWindow.h
@@ -182,7 +182,7 @@ private:
QStringList PromptFileNames();
- void EnableScreenSaver(bool enable);
+ void UpdateScreenSaverInhibition();
void OnStopComplete();
void dragEnterEvent(QDragEnterEvent* event) override;
diff --git a/Source/Core/DolphinQt/Settings/InterfacePane.cpp b/Source/Core/DolphinQt/Settings/InterfacePane.cpp
index 4b629686d2..145d532213 100644
--- a/Source/Core/DolphinQt/Settings/InterfacePane.cpp
+++ b/Source/Core/DolphinQt/Settings/InterfacePane.cpp
@@ -148,12 +148,14 @@ void InterfacePane::CreateUI()
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_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_userstyle);
groupbox_layout->addWidget(m_checkbox_use_covers);
groupbox_layout->addWidget(m_checkbox_show_debugging_ui);
groupbox_layout->addWidget(m_checkbox_focused_hotkeys);
+ groupbox_layout->addWidget(m_checkbox_disable_screensaver);
}
void InterfacePane::CreateInGame()
@@ -185,6 +187,7 @@ void InterfacePane::ConnectLayout()
connect(m_checkbox_use_builtin_title_database, &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_focused_hotkeys, &QCheckBox::toggled, this, &InterfacePane::OnSaveConfig);
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_focused_hotkeys->setChecked(Config::Get(Config::MAIN_FOCUSED_HOTKEYS));
m_checkbox_hide_mouse->setChecked(Settings::Instance().GetHideCursor());
+ m_checkbox_disable_screensaver->setChecked(Config::Get(Config::MAIN_DISABLE_SCREENSAVER));
}
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_DISABLE_SCREENSAVER, m_checkbox_disable_screensaver->isChecked());
settings.SaveSettings();
}
diff --git a/Source/Core/DolphinQt/Settings/InterfacePane.h b/Source/Core/DolphinQt/Settings/InterfacePane.h
index 22e07da7ca..d135de5992 100644
--- a/Source/Core/DolphinQt/Settings/InterfacePane.h
+++ b/Source/Core/DolphinQt/Settings/InterfacePane.h
@@ -37,6 +37,7 @@ private:
QCheckBox* m_checkbox_show_debugging_ui;
QCheckBox* m_checkbox_focused_hotkeys;
QCheckBox* m_checkbox_use_covers;
+ QCheckBox* m_checkbox_disable_screensaver;
QCheckBox* m_checkbox_confirm_on_stop;
QCheckBox* m_checkbox_use_panic_handlers;
diff --git a/Source/Core/UICommon/UICommon.cpp b/Source/Core/UICommon/UICommon.cpp
index 84466cca0b..0d8c4f5d2b 100644
--- a/Source/Core/UICommon/UICommon.cpp
+++ b/Source/Core/UICommon/UICommon.cpp
@@ -397,57 +397,42 @@ bool TriggerSTMPowerEvent()
}
#if defined(HAVE_XRANDR) && HAVE_XRANDR
-void EnableScreenSaver(Window win, bool enable)
+void InhibitScreenSaver(Window win, bool inhibit)
#else
-void EnableScreenSaver(bool enable)
+void InhibitScreenSaver(bool inhibit)
#endif
{
// Inhibit the screensaver. Depending on the operating system this may also
// disable low-power states and/or screen dimming.
#if defined(HAVE_X11) && HAVE_X11
- if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER))
- {
- X11Utils::InhibitScreensaver(win, !enable);
- }
+ X11Utils::InhibitScreensaver(win, inhibit);
#endif
#ifdef _WIN32
// Prevents Windows from sleeping, turning off the display, or idling
- if (enable)
- {
- 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);
- }
+ SetThreadExecutionState(ES_CONTINUOUS |
+ (inhibit ? (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED) : 0));
#endif
#ifdef __APPLE__
static IOPMAssertionID s_power_assertion = kIOPMNullAssertionID;
-
- if (Config::Get(Config::MAIN_DISABLE_SCREENSAVER))
+ if (inhibit)
{
- 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)
- {
- IOPMAssertionRelease(s_power_assertion);
- s_power_assertion = kIOPMNullAssertionID;
- }
+ s_power_assertion = kIOPMNullAssertionID;
}
- else
+ }
+ else
+ {
+ if (s_power_assertion != kIOPMNullAssertionID)
{
- CFStringRef reason_for_activity = CFSTR("Emulation Running");
- if (IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep,
- kIOPMAssertionLevelOn, reason_for_activity,
- &s_power_assertion) != kIOReturnSuccess)
- {
- s_power_assertion = kIOPMNullAssertionID;
- }
+ IOPMAssertionRelease(s_power_assertion);
+ s_power_assertion = kIOPMNullAssertionID;
}
}
#endif
diff --git a/Source/Core/UICommon/UICommon.h b/Source/Core/UICommon/UICommon.h
index 2722559a2a..830dc064e5 100644
--- a/Source/Core/UICommon/UICommon.h
+++ b/Source/Core/UICommon/UICommon.h
@@ -14,9 +14,9 @@ void Init();
void Shutdown();
#if defined(HAVE_XRANDR) && HAVE_XRANDR
-void EnableScreenSaver(unsigned long win, bool enable);
+void InhibitScreenSaver(unsigned long win, bool enable);
#else
-void EnableScreenSaver(bool enable);
+void InhibitScreenSaver(bool enable);
#endif
// Calls std::locale::global, selecting a fallback locale if the