2 * Copyright (C) 2017-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
19 class COSScreenSaverManager
;
22 * Inhibit the OS screen saver as long as this object is alive
24 * Destroy or call \ref Release to stop this inhibitor from being active.
25 * The OS screen saver may still be inhibited as long as other inhibitors are
28 * \note Make sure to release or destroy the inhibitor before the \ref
29 * COSScreenSaverManager is destroyed
31 class COSScreenSaverInhibitor
34 COSScreenSaverInhibitor() noexcept
;
35 COSScreenSaverInhibitor(COSScreenSaverInhibitor
&& other
) noexcept
;
36 COSScreenSaverInhibitor
& operator=(COSScreenSaverInhibitor
&& other
) noexcept
;
37 ~COSScreenSaverInhibitor() noexcept
;
39 bool IsActive() const;
40 operator bool() const;
43 friend class COSScreenSaverManager
;
44 explicit COSScreenSaverInhibitor(COSScreenSaverManager
* manager
);
46 COSScreenSaverManager
* m_manager
;
48 COSScreenSaverInhibitor(COSScreenSaverInhibitor
const& other
) = delete;
49 COSScreenSaverInhibitor
& operator=(COSScreenSaverInhibitor
const& other
) = delete;
53 * Interface for OS screen saver control implementations
58 virtual ~IOSScreenSaver() = default;
60 * Do not allow the OS screen saver to become active
62 * Calling this function multiple times without calling \ref Unhibit
63 * MUST NOT produce any side-effects.
65 virtual void Inhibit() = 0;
67 * Allow the OS screen saver to become active again
69 * Calling this function multiple times or at all without calling \ref Inhibit
70 * MUST NOT produce any side-effects.
72 virtual void Uninhibit() = 0;
76 * Dummy implementation of IOSScreenSaver
78 class CDummyOSScreenSaver
: public IOSScreenSaver
81 void Inhibit() override
{}
82 void Uninhibit() override
{}
86 * Manage the OS screen saver
88 * This class keeps track of a number of \ref COSScreenSaverInhibitor instances
89 * and keeps the OS screen saver inhibited as long as at least one of them
90 * exists and is active.
92 class COSScreenSaverManager
96 * Create manager with backing OS-specific implementation
98 explicit COSScreenSaverManager(std::unique_ptr
<IOSScreenSaver
> impl
);
100 * Create inhibitor that prevents the OS screen saver from becoming active as
101 * long as it is alive
103 COSScreenSaverInhibitor
CreateInhibitor();
105 * Check whether the OS screen saver is currently inhibited
110 friend class COSScreenSaverInhibitor
;
111 void RemoveInhibitor();
113 unsigned int m_inhibitionCount
{0u};
114 std::unique_ptr
<IOSScreenSaver
> m_impl
;