summaryrefslogtreecommitdiffstats
path: root/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm')
-rw-r--r--src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm50
1 files changed, 46 insertions, 4 deletions
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
index 42196b26..c73f5c1e 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
@@ -76,12 +76,17 @@
uint32_t m_fMask;
/** Array of callbacks. */
NSMutableArray *m_pCallbacks;
+ /** AppNap preventing activity. */
+ id <NSObject> m_activity;
}
- (id)init;
- (void)sendEvent :(NSEvent *)theEvent;
- (void)setCallback :(uint32_t)fMask :(PFNVBOXCACALLBACK)pfnCallback :(void *)pvUser;
- (void)unsetCallback :(uint32_t)fMask :(PFNVBOXCACALLBACK)pfnCallback :(void *)pvUser;
+- (void)finishLaunching;
+- (void)terminate :(nullable id)sender;
+
- (void)registerToNotificationOfWorkspace :(NSString *)pstrNotificationName;
- (void)unregisterFromNotificationOfWorkspace :(NSString *)pstrNotificationName;
@@ -180,6 +185,38 @@
m_fMask = fNewMask;
}
+/** Standard handler called right after NSApp finished launching. */
+- (void)finishLaunching
+{
+ /* Call to base-class: */
+ [super finishLaunching];
+
+ if (UICocoaApplication::instance()->isPreventAppNap())
+ {
+ //printf("Start activity preventing AppNap!\n");
+ NSActivityOptions options = NSActivityUserInitiatedAllowingIdleSystemSleep;
+ NSString *pstrReason = @"VirtualBox napping is prohibited!";
+ m_activity = [[NSProcessInfo processInfo] beginActivityWithOptions:options
+ reason:pstrReason];
+ [m_activity retain];
+ }
+}
+
+/** Standard handler called right before NSApp starting termination. */
+- (void)terminate :(nullable id)sender
+{
+ if (UICocoaApplication::instance()->isPreventAppNap())
+ {
+ //printf("Finish activity preventing AppNap!\n");
+ [[NSProcessInfo processInfo] endActivity:m_activity];
+ [m_activity release];
+ m_activity = Nil;
+ }
+
+ /* Call to base-class: */
+ [super terminate: sender];
+}
+
/** Registers to cocoa notification @a pstrNotificationName. */
- (void) registerToNotificationOfWorkspace :(NSString *)pstrNotificationName
{
@@ -294,18 +331,23 @@
*********************************************************************************************************************************/
/* static */
-UICocoaApplication* UICocoaApplication::s_pInstance = 0;
+UICocoaApplication *UICocoaApplication::s_pInstance = 0;
/* static */
-UICocoaApplication* UICocoaApplication::instance()
+void UICocoaApplication::create(bool fPreventAppNap)
{
if (!s_pInstance)
- s_pInstance = new UICocoaApplication;
+ s_pInstance = new UICocoaApplication(fPreventAppNap);
+}
+/* static */
+UICocoaApplication *UICocoaApplication::instance()
+{
return s_pInstance;
}
-UICocoaApplication::UICocoaApplication()
+UICocoaApplication::UICocoaApplication(bool fPreventAppNap)
+ : m_fPreventAppNap(fPreventAppNap)
{
/* Make sure our private NSApplication object is created: */
m_pNative = (UICocoaApplicationPrivate*)[UICocoaApplicationPrivate sharedApplication];