blob: 9d78c6e36d26e836279044666ab2dc8209ac72dd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
* Copyright (C) 2005-2018 Team Kodi
* This file is part of Kodi - https://kodi.tv
*
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSES/README.md for more information.
*/
#pragma once
#include "application/IApplicationComponent.h"
#ifdef TARGET_WINDOWS
#include "powermanagement/WinIdleTimer.h"
#endif
#include "utils/Stopwatch.h"
#include "windowing/OSScreenSaver.h"
#include <string>
namespace ADDON
{
class IAddon;
using AddonPtr = std::shared_ptr<IAddon>;
} // namespace ADDON
class CApplication;
class CSetting;
/*!
* \brief Class handling application support for screensavers, dpms and shutdown timers.
*/
class CApplicationPowerHandling : public IApplicationComponent
{
friend class CApplication;
public:
bool IsInScreenSaver() const { return m_screensaverActive; }
bool IsScreenSaverInhibited() const;
void ResetScreenSaver();
void SetScreenSaverLockFailed() { m_iScreenSaveLock = -1; }
void SetScreenSaverUnlocked() { m_iScreenSaveLock = 1; }
void StopScreenSaverTimer();
std::string ScreensaverIdInUse() const { return m_screensaverIdInUse; }
bool GetRenderGUI() const { return m_renderGUI; }
void SetRenderGUI(bool renderGUI);
int GlobalIdleTime();
void ResetSystemIdleTimer();
bool IsIdleShutdownInhibited() const;
void ResetShutdownTimers();
void StopShutdownTimer();
void ResetNavigationTimer();
bool IsDPMSActive() const { return m_dpmsIsActive; }
bool ToggleDPMS(bool manual);
// Wakes up from the screensaver and / or DPMS. Returns true if woken up.
bool WakeUpScreenSaverAndDPMS(bool bPowerOffKeyPressed = false);
bool OnSettingChanged(const CSetting& setting);
bool OnSettingAction(const CSetting& setting);
protected:
void ActivateScreenSaver(bool forceType = false);
void CheckOSScreenSaverInhibitionSetting();
// Checks whether the screensaver and / or DPMS should become active.
void CheckScreenSaverAndDPMS();
void InhibitScreenSaver(bool inhibit);
void ResetScreenSaverTimer();
bool WakeUpScreenSaver(bool bPowerOffKeyPressed = false);
void InhibitIdleShutdown(bool inhibit);
/*! \brief Helper method to determine how to handle TMSG_SHUTDOWN
*/
void HandleShutdownMessage();
void CheckShutdown();
float NavigationIdleTime();
bool m_renderGUI{false};
bool m_bInhibitScreenSaver = false;
bool m_bResetScreenSaver = false;
ADDON::AddonPtr
m_pythonScreenSaver; // @warning: Fallback for Python interface, for binaries not needed!
bool m_screensaverActive = false;
// -1 = failed, 0 = locked, 1 = unlocked, 2 = check in progress
int m_iScreenSaveLock = 0;
std::string m_screensaverIdInUse;
bool m_dpmsIsActive = false;
bool m_dpmsIsManual = false;
bool m_bInhibitIdleShutdown = false;
CStopWatch m_navigationTimer;
CStopWatch m_shutdownTimer;
#ifdef TARGET_WINDOWS
CWinIdleTimer m_idleTimer;
CWinIdleTimer m_screenSaverTimer;
#else
CStopWatch m_idleTimer;
CStopWatch m_screenSaverTimer;
#endif
// OS screen saver inhibitor that is always active if user selected a Kodi screen saver
KODI::WINDOWING::COSScreenSaverInhibitor m_globalScreensaverInhibitor;
// Inhibitor that is active e.g. during video playback
KODI::WINDOWING::COSScreenSaverInhibitor m_screensaverInhibitor;
};
|