Add support for inhibiting the screensaver on windows.

This commit is contained in:
John Maguire 2015-10-30 16:45:51 +00:00
parent 84cc26f8b3
commit f92e88e321
4 changed files with 72 additions and 0 deletions

View File

@ -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

View File

@ -30,6 +30,10 @@
#include "macscreensaver.h"
#endif
#ifdef Q_OS_WIN32
#include "windowsscreensaver.h"
#endif
#include <QtDebug>
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_;

View File

@ -0,0 +1,30 @@
/* This file is part of Clementine.
Copyright 2015, John Maguire <john.maguire@gmail.com>
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 <http://www.gnu.org/licenses/>.
*/
#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_);
}

View File

@ -0,0 +1,35 @@
/* This file is part of Clementine.
Copyright 2015, John Maguire <john.maguire@gmail.com>
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 <http://www.gnu.org/licenses/>.
*/
#ifndef WINDOWSSCREENSAVER_H
#define WINDOWSSCREENSAVER_H
#include "screensaver.h"
#include <windows.h>
class WindowsScreensaver : public Screensaver {
public:
WindowsScreensaver();
void Inhibit() override;
void Uninhibit() override;
private:
EXECUTION_STATE previous_state_;
};
#endif // WINDOWSSCREENSAVER_H