// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #pragma once #include class QWindow; namespace base { enum class PowerSaveBlockType { PreventAppSuspension, PreventDisplaySleep, kCount, }; class PowerSaveBlocker final { public: PowerSaveBlocker( PowerSaveBlockType type, const QString &description, QWindow *window); ~PowerSaveBlocker(); [[nodiscard]] PowerSaveBlockType type() const { return _type; } [[nodiscard]] const QString &description() const { return _description; } [[nodiscard]] QPointer window() const; private: const PowerSaveBlockType _type = {}; const QString _description; const QPointer _window; }; // DescriptionResolver -> QString, WindowResolver -> QPointer. template void UpdatePowerSaveBlocker( std::unique_ptr &blocker, bool block, PowerSaveBlockType type, DescriptionResolver &&description, WindowResolver &&window) { if (block && !blocker) { blocker = std::make_unique( type, description(), window()); } else if (!block && blocker) { blocker = nullptr; } } } // namespace base