diff --git a/src/app/os/macos/connectivitymonitor.mm b/src/app/os/macos/connectivitymonitor.mm index f2fd6ff72f401b836f798fce15b2ee165269c28e..586a446f2c146fffe9ba5af352893fa629b297c9 100644 --- a/src/app/os/macos/connectivitymonitor.mm +++ b/src/app/os/macos/connectivitymonitor.mm @@ -17,14 +17,46 @@ */ #include <CoreFoundation/CoreFoundation.h> +#include <AppKit/AppKit.h> #include <IOKit/pwr_mgt/IOPMLib.h> #include <SystemConfiguration/SystemConfiguration.h> #include "connectivitymonitor.h" #include <QDebug> +typedef void(^SystemMonitorCallback)(void); + +@interface SystemMonitor: NSObject + +-(void)startWithCallBack:(SystemMonitorCallback) callback; +@property (nonatomic, copy) SystemMonitorCallback callback; + +@end + +@implementation SystemMonitor + +-(void)startWithCallBack:(SystemMonitorCallback)callback { + self.callback = callback; + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self + selector: @selector(receiveWakeNotification:) + name: NSWorkspaceDidWakeNotification object: NULL]; +} + +- (void)receiveWakeNotification:(NSNotification*)note +{ + _callback(); +} + +-(void)dealloc { + [_callback release], _callback = nil; + [super dealloc]; +} + +@end + dispatch_queue_t scNetworkQueue; SCNetworkReachabilityRef currentReachability; +SystemMonitor* systemMonitor; static void ReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkConnectionFlags flags, void* info) { @@ -36,6 +68,10 @@ ConnectivityMonitor::ConnectivityMonitor(QObject* parent) : QObject(parent) { scNetworkQueue = dispatch_queue_create("scNetworkReachability", DISPATCH_QUEUE_SERIAL); + systemMonitor = [[SystemMonitor alloc] init]; + [systemMonitor startWithCallBack: ^(void) { + Q_EMIT connectivityChanged(); + }]; SCNetworkReachabilityRef reachabilityRef = NULL; void (^callbackBlock)(SCNetworkReachabilityFlags) = ^(SCNetworkReachabilityFlags flags) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @@ -61,7 +97,6 @@ ConnectivityMonitor::~ConnectivityMonitor() { SCNetworkReachabilitySetCallback(currentReachability, NULL, NULL); currentReachability = NULL; - qDebug() << "Destroying connectivity monitor"; } bool