From f92e88e321fa13b3be9c61546bae8108b5ba6713 Mon Sep 17 00:00:00 2001 From: John Maguire Date: Fri, 30 Oct 2015 16:45:51 +0000 Subject: [PATCH] Add support for inhibiting the screensaver on windows. --- src/CMakeLists.txt | 1 + src/ui/screensaver.cpp | 6 ++++++ src/ui/windowsscreensaver.cpp | 30 ++++++++++++++++++++++++++++++ src/ui/windowsscreensaver.h | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/ui/windowsscreensaver.cpp create mode 100644 src/ui/windowsscreensaver.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d2bbedb3e..e735855db 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -875,6 +875,7 @@ optional_source(WIN32 SOURCES engines/directsounddevicefinder.cpp networkremote/tinysvcmdns.cpp + ui/windowsscreensaver.cpp widgets/osd_win.cpp INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/3rdparty/tinysvcmdns diff --git a/src/ui/screensaver.cpp b/src/ui/screensaver.cpp index f919845cd..af55ab8e1 100644 --- a/src/ui/screensaver.cpp +++ b/src/ui/screensaver.cpp @@ -30,6 +30,10 @@ #include "macscreensaver.h" #endif +#ifdef Q_OS_WIN32 +#include "windowsscreensaver.h" +#endif + #include const char* Screensaver::kGnomeService = "org.gnome.ScreenSaver"; @@ -54,6 +58,8 @@ Screensaver* Screensaver::GetScreensaver() { } #elif defined(Q_OS_DARWIN) screensaver_ = new MacScreensaver(); +#elif defined(Q_OS_WIN32) + screensaver_ = new WindowsScreensaver(); #endif } return screensaver_; diff --git a/src/ui/windowsscreensaver.cpp b/src/ui/windowsscreensaver.cpp new file mode 100644 index 000000000..850ba3866 --- /dev/null +++ b/src/ui/windowsscreensaver.cpp @@ -0,0 +1,30 @@ +/* This file is part of Clementine. + Copyright 2015, John Maguire + + Clementine is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Clementine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Clementine. If not, see . +*/ + +#include "windowsscreensaver.h" + +WindowsScreensaver::WindowsScreensaver() : previous_state_(0) {} + +void WindowsScreensaver::Inhibit() { + // TODO: use PowerCreateRequest on Win7+ + previous_state_ = + SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED); +} + +void WindowsScreensaver::Uninhibit() { + SetThreadExecutionState(ES_CONTINUOUS | previous_state_); +} diff --git a/src/ui/windowsscreensaver.h b/src/ui/windowsscreensaver.h new file mode 100644 index 000000000..fc3bd8f07 --- /dev/null +++ b/src/ui/windowsscreensaver.h @@ -0,0 +1,35 @@ +/* This file is part of Clementine. + Copyright 2015, John Maguire + + Clementine is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Clementine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Clementine. If not, see . +*/ +#ifndef WINDOWSSCREENSAVER_H +#define WINDOWSSCREENSAVER_H + +#include "screensaver.h" + +#include + +class WindowsScreensaver : public Screensaver { + public: + WindowsScreensaver(); + + void Inhibit() override; + void Uninhibit() override; + + private: + EXECUTION_STATE previous_state_; +}; + +#endif // WINDOWSSCREENSAVER_H