From ab8d9e14e86fad14ccb44652f92791aac8ddd6c2 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 11 Nov 2021 16:14:37 -0800 Subject: [PATCH] moved sleep prevention code for further abstraction, implemented macOS --- CMakeLists.txt | 4 +++ app/widget/viewer/CMakeLists.txt | 2 ++ app/widget/viewer/viewer.cpp | 13 +++------ app/widget/viewer/viewerpreventsleep.cpp | 34 ++++++++++++++++++++++++ app/widget/viewer/viewerpreventsleep.h | 10 +++++++ 5 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 app/widget/viewer/viewerpreventsleep.cpp create mode 100644 app/widget/viewer/viewerpreventsleep.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6524c5e8c..35b402073 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,6 +156,10 @@ else() endif() endif() +if (APPLE) + list(APPEND OLIVE_LIBRARIES "-framework IOKit") +endif() + # Generate Git hash set(PROJECT_LONG_VERSION ${PROJECT_VERSION}) if(EXISTS "${CMAKE_SOURCE_DIR}/.git") diff --git a/app/widget/viewer/CMakeLists.txt b/app/widget/viewer/CMakeLists.txt index 23b401cfe..345702e69 100644 --- a/app/widget/viewer/CMakeLists.txt +++ b/app/widget/viewer/CMakeLists.txt @@ -26,6 +26,8 @@ set(OLIVE_SOURCES widget/viewer/viewerdisplay.h widget/viewer/viewerplaybacktimer.cpp widget/viewer/viewerplaybacktimer.h + widget/viewer/viewerpreventsleep.cpp + widget/viewer/viewerpreventsleep.h widget/viewer/viewerqueue.h widget/viewer/viewersafemargininfo.h widget/viewer/viewersizer.cpp diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index fc9c4bb1b..d97cda0ac 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -30,10 +30,6 @@ #include #include -#ifdef _WIN32 -#include "winbase.h" -#endif - #include "audio/audiomanager.h" #include "common/clamp.h" #include "common/power.h" @@ -44,6 +40,7 @@ #include "node/project/project.h" #include "render/rendermanager.h" #include "task/taskmanager.h" +#include "viewerpreventsleep.h" #include "widget/menu/menu.h" #include "window/mainwindow/mainwindow.h" @@ -707,9 +704,7 @@ void ViewerWidget::PlayInternal(int speed, bool in_to_out_only) } } // Force screen to stay awake -#ifdef _WIN32 - SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_CONTINUOUS); -#endif + PreventSleep(true); } void ViewerWidget::PauseInternal() @@ -752,9 +747,7 @@ void ViewerWidget::PauseInternal() prequeuing_audio_ = 0; // Reset screen timeout timer -#ifdef _WIN32 - SetThreadExecutionState(ES_CONTINUOUS); -#endif + PreventSleep(false); } void ViewerWidget::PushScrubbedAudio() diff --git a/app/widget/viewer/viewerpreventsleep.cpp b/app/widget/viewer/viewerpreventsleep.cpp new file mode 100644 index 000000000..8de97c7c1 --- /dev/null +++ b/app/widget/viewer/viewerpreventsleep.cpp @@ -0,0 +1,34 @@ +#include "viewerpreventsleep.h" + +#include + +#if defined(Q_OS_WINDOWS) +#include +#elif defined(Q_OS_MAC) +#include +#endif + +namespace olive { + +#if defined(Q_OS_MAC) +IOPMAssertionID assertionID = 0; +#endif + +void PreventSleep(bool on) +{ +#if defined(Q_OS_WINDOWS) + SetThreadExecutionState(on ? ES_DISPLAY_REQUIRED | ES_CONTINUOUS : ES_CONTINUOUS); +#elif defined(Q_OS_MAC) + if (on) { + static const CFStringRef reasonForActivity = CFSTR("Video Playback"); + + IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, + kIOPMAssertionLevelOn, reasonForActivity, &assertionID); + } else if (assertionID) { + IOPMAssertionRelease(assertionID); + assertionID = 0; + } +#endif +} + +} diff --git a/app/widget/viewer/viewerpreventsleep.h b/app/widget/viewer/viewerpreventsleep.h new file mode 100644 index 000000000..482ef3a11 --- /dev/null +++ b/app/widget/viewer/viewerpreventsleep.h @@ -0,0 +1,10 @@ +#ifndef VIEWERPREVENTSLEEP_H +#define VIEWERPREVENTSLEEP_H + +namespace olive { + +void PreventSleep(bool on); + +} + +#endif // VIEWERPREVENTSLEEP_H