[videodb] remove unused seasons table from episode_view
[xbmc.git] / xbmc / windowing / OSScreenSaver.h
blob367d6dbe4adcda3f43ed66cd0e9d9662ba6b7ff3
1 /*
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.
7 */
9 #pragma once
11 #include <memory>
12 #include <utility>
14 namespace KODI
16 namespace WINDOWING
19 class COSScreenSaverManager;
21 /**
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
26 * active though.
28 * \note Make sure to release or destroy the inhibitor before the \ref
29 * COSScreenSaverManager is destroyed
31 class COSScreenSaverInhibitor
33 public:
34 COSScreenSaverInhibitor() noexcept;
35 COSScreenSaverInhibitor(COSScreenSaverInhibitor&& other) noexcept;
36 COSScreenSaverInhibitor& operator=(COSScreenSaverInhibitor&& other) noexcept;
37 ~COSScreenSaverInhibitor() noexcept;
38 void Release();
39 bool IsActive() const;
40 operator bool() const;
42 private:
43 friend class COSScreenSaverManager;
44 explicit COSScreenSaverInhibitor(COSScreenSaverManager* manager);
45 bool m_active;
46 COSScreenSaverManager* m_manager;
48 COSScreenSaverInhibitor(COSScreenSaverInhibitor const& other) = delete;
49 COSScreenSaverInhibitor& operator=(COSScreenSaverInhibitor const& other) = delete;
52 /**
53 * Interface for OS screen saver control implementations
55 class IOSScreenSaver
57 public:
58 virtual ~IOSScreenSaver() = default;
59 /**
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;
66 /**
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;
75 /**
76 * Dummy implementation of IOSScreenSaver
78 class CDummyOSScreenSaver : public IOSScreenSaver
80 public:
81 void Inhibit() override {}
82 void Uninhibit() override {}
85 /**
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
94 public:
95 /**
96 * Create manager with backing OS-specific implementation
98 explicit COSScreenSaverManager(std::unique_ptr<IOSScreenSaver> impl);
99 /**
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
107 bool IsInhibited();
109 private:
110 friend class COSScreenSaverInhibitor;
111 void RemoveInhibitor();
113 unsigned int m_inhibitionCount{0u};
114 std::unique_ptr<IOSScreenSaver> m_impl;