git / moonbite-core / src/qt/macos_appnap.mm · raw
// Copyright (c) 2011-2018 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include "macos_appnap.h"#include <AvailabilityMacros.h>#include <Foundation/NSProcessInfo.h>#include <Foundation/Foundation.h>class CAppNapInhibitor::CAppNapImpl{public: ~CAppNapImpl() { if(activityId) enableAppNap(); } void disableAppNap() { if (!activityId) { @autoreleasepool { const NSActivityOptions activityOptions = NSActivityUserInitiatedAllowingIdleSystemSleep & ~(NSActivitySuddenTerminationDisabled | NSActivityAutomaticTerminationDisabled); id processInfo = [NSProcessInfo processInfo]; if ([processInfo respondsToSelector:@selector(beginActivityWithOptions:reason:)]) { activityId = [processInfo beginActivityWithOptions: activityOptions reason:@"Temporarily disable App Nap for bitcoin-qt."]; [activityId retain]; } } } } void enableAppNap() { if(activityId) { @autoreleasepool { id processInfo = [NSProcessInfo processInfo]; if ([processInfo respondsToSelector:@selector(endActivity:)]) [processInfo endActivity:activityId]; [activityId release]; activityId = nil; } } }private: NSObject* activityId;};CAppNapInhibitor::CAppNapInhibitor() : impl(new CAppNapImpl()) {}CAppNapInhibitor::~CAppNapInhibitor() = default;void CAppNapInhibitor::disableAppNap(){ impl->disableAppNap();}void CAppNapInhibitor::enableAppNap(){ impl->enableAppNap();}