UICommon: Move screensaver code to UICommon

This commit is contained in:
spycrab 2018-01-01 21:03:50 +00:00
parent 26a9957285
commit 0dd52ca7ab
5 changed files with 87 additions and 67 deletions

View file

@ -73,6 +73,8 @@
#include "InputCommon/ControllerInterface/ControllerInterface.h" #include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/GCPadStatus.h" #include "InputCommon/GCPadStatus.h"
#include "UICommon/UICommon.h"
#include "VideoCommon/OnScreenDisplay.h" #include "VideoCommon/OnScreenDisplay.h"
#include "VideoCommon/RenderBase.h" #include "VideoCommon/RenderBase.h"
#include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VertexShaderManager.h"
@ -702,61 +704,13 @@ WXLRESULT CFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
} }
#endif #endif
void CFrame::InhibitScreensaver() void CFrame::EnableScreenSaver(bool enable)
{ {
// Inhibit the screensaver. Depending on the operating system this may also #if defined(HAVE_XRANDR) && HAVE_XRANDR
// disable low-power states and/or screen dimming. UICommon::EnableScreenSaver(X11Utils::XDisplayFromHandle(GetHandle()),
X11Utils::XWindowFromHandle(GetHandle()), enable);
#if defined(HAVE_X11) && HAVE_X11 #else
if (SConfig::GetInstance().bDisableScreenSaver) UICommon::EnableScreenSaver(enable);
{
X11Utils::InhibitScreensaver(X11Utils::XDisplayFromHandle(GetHandle()),
X11Utils::XWindowFromHandle(GetHandle()), true);
}
#endif
#ifdef _WIN32
// Prevents Windows from sleeping, turning off the display, or idling
EXECUTION_STATE should_screen_save =
SConfig::GetInstance().bDisableScreenSaver ? ES_DISPLAY_REQUIRED : 0;
SetThreadExecutionState(ES_CONTINUOUS | should_screen_save | ES_SYSTEM_REQUIRED);
#endif
#ifdef __APPLE__
if (SConfig::GetInstance().bDisableScreenSaver)
{
CFStringRef reason_for_activity = CFSTR("Emulation Running");
if (IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep,
kIOPMAssertionLevelOn, reason_for_activity,
&m_power_assertion) != kIOReturnSuccess)
{
m_power_assertion = kIOPMNullAssertionID;
}
}
#endif
}
void CFrame::UninhibitScreensaver()
{
#if defined(HAVE_X11) && HAVE_X11
if (SConfig::GetInstance().bDisableScreenSaver)
{
X11Utils::InhibitScreensaver(X11Utils::XDisplayFromHandle(GetHandle()),
X11Utils::XWindowFromHandle(GetHandle()), false);
}
#endif
#ifdef _WIN32
// Allow windows to resume normal idling behavior
SetThreadExecutionState(ES_CONTINUOUS);
#endif
#ifdef __APPLE__
if (m_power_assertion != kIOPMNullAssertionID)
{
IOPMAssertionRelease(m_power_assertion);
m_power_assertion = kIOPMNullAssertionID;
}
#endif #endif
} }

View file

@ -27,10 +27,6 @@
#include "UICommon/X11Utils.h" #include "UICommon/X11Utils.h"
#endif #endif
#ifdef __APPLE__
#include <IOKit/pwr_mgt/IOPMLib.h>
#endif
struct BootParameters; struct BootParameters;
// Class declarations // Class declarations
@ -244,13 +240,8 @@ private:
WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
#endif #endif
// Screensaver // Screensaver
#ifdef __APPLE__ void EnableScreenSaver(bool enable);
IOPMAssertionID m_power_assertion = kIOPMNullAssertionID;
#endif
void InhibitScreensaver();
void UninhibitScreensaver();
void DoOpen(bool Boot); void DoOpen(bool Boot);
void DoPause(); void DoPause();
void DoToggleToolbar(bool); void DoToggleToolbar(bool);

View file

@ -744,7 +744,7 @@ void CFrame::StartGame(std::unique_ptr<BootParameters> boot)
} }
else else
{ {
InhibitScreensaver(); EnableScreenSaver(false);
// We need this specifically to support setting the focus properly when using // We need this specifically to support setting the focus properly when using
// the 'render to main window' feature on Windows // the 'render to main window' feature on Windows
@ -931,7 +931,7 @@ void CFrame::OnStopped()
m_tried_graceful_shutdown = false; m_tried_graceful_shutdown = false;
wxPostEvent(GetMenuBar(), wxCommandEvent{DOLPHIN_EVT_UPDATE_LOAD_WII_MENU_ITEM}); wxPostEvent(GetMenuBar(), wxCommandEvent{DOLPHIN_EVT_UPDATE_LOAD_WII_MENU_ITEM});
UninhibitScreensaver(); EnableScreenSaver(true);
m_render_frame->SetTitle(StrToWxStr(Common::scm_rev_str)); m_render_frame->SetTitle(StrToWxStr(Common::scm_rev_str));

View file

@ -26,6 +26,14 @@
#include "UICommon/UICommon.h" #include "UICommon/UICommon.h"
#include "UICommon/USBUtils.h" #include "UICommon/USBUtils.h"
#if defined(HAVE_XRANDR) && HAVE_XRANDR
#include "UICommon/X11Utils.h"
#endif
#ifdef __APPLE__
#include <IOKit/pwr_mgt/IOPMLib.h>
#endif
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
namespace UICommon namespace UICommon
@ -248,4 +256,61 @@ bool TriggerSTMPowerEvent()
return true; return true;
} }
#if defined(HAVE_XRANDR) && HAVE_X11
void EnableScreenSaver(Display* display, Window win, bool enable)
#else
void EnableScreenSaver(bool enable)
#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 (SConfig::GetInstance().bDisableScreenSaver)
{
X11Utils::InhibitScreensaver(display, win, !enable);
}
#endif
#ifdef _WIN32
// Prevents Windows from sleeping, turning off the display, or idling
if (enable)
{
SetThreadExecutionState(ES_CONTINUOUS);
}
else
{
EXECUTION_STATE should_screen_save =
SConfig::GetInstance().bDisableScreenSaver ? ES_DISPLAY_REQUIRED : 0;
SetThreadExecutionState(ES_CONTINUOUS | should_screen_save | ES_SYSTEM_REQUIRED);
}
#endif
#ifdef __APPLE__
static IOPMAssertionID s_power_assertion = kIOPMNullAssertionID;
if (SConfig::GetInstance().bDisableScreenSaver)
{
if (enable)
{
if (s_power_assertion != kIOPMNullAssertionID)
{
IOPMAssertionRelease(s_power_assertion);
s_power_assertion = kIOPMNullAssertionID;
}
}
else
{
CFStringRef reason_for_activity = CFSTR("Emulation Running");
if (IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep,
kIOPMAssertionLevelOn, reason_for_activity,
&s_power_assertion) != kIOReturnSuccess)
{
s_power_assertion = kIOPMNullAssertionID;
}
}
}
#endif
}
} // namespace UICommon } // namespace UICommon

View file

@ -4,11 +4,21 @@
#pragma once #pragma once
#if defined(HAVE_XRANDR) && HAVE_XRANDR
#include <X11/extensions/Xrandr.h>
#endif
namespace UICommon namespace UICommon
{ {
void Init(); void Init();
void Shutdown(); void Shutdown();
#if defined(HAVE_XRANDR) && HAVE_XRANDR
void EnableScreenSaver(Display* display, Window win, bool enable);
#else
void EnableScreenSaver(bool enable);
#endif
void CreateDirectories(); void CreateDirectories();
void SetUserDirectory(const std::string& custom_path); void SetUserDirectory(const std::string& custom_path);