Compare commits
2 Commits
e2396db29c
...
c5ae162dcd
Author | SHA1 | Date |
---|---|---|
Patrick Wardle | c5ae162dcd | |
Patrick Wardle | 0c2436afcf |
|
@ -89,15 +89,6 @@ extern os_log_t logHandle;
|
|||
//per device events
|
||||
self.deviceEvents = [NSMutableDictionary dictionary];
|
||||
|
||||
//enumerate active devices
|
||||
// then update status menu (on main thread)
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
//update status menu
|
||||
[((AppDelegate*)[[NSApplication sharedApplication] delegate]).statusBarItemController setActiveDevices:[self enumerateActiveDevices]];
|
||||
|
||||
});
|
||||
|
||||
//find built-in mic
|
||||
self.builtInMic = [self findBuiltInMic];
|
||||
|
||||
|
@ -241,21 +232,6 @@ extern os_log_t logHandle;
|
|||
return;
|
||||
}
|
||||
|
||||
//(re)enumerate active devices
|
||||
// delayed need as device deactiavation
|
||||
// then update status menu (on main thread)
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
|
||||
{
|
||||
//update on on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
//update status menu
|
||||
[((AppDelegate*)[[NSApplication sharedApplication] delegate]).statusBarItemController setActiveDevices:[self enumerateActiveDevices]];
|
||||
|
||||
});
|
||||
|
||||
}); //dispatch for delay
|
||||
|
||||
}
|
||||
|
||||
}];
|
||||
|
@ -314,21 +290,6 @@ extern os_log_t logHandle;
|
|||
|
||||
//save
|
||||
self.lastCameraClient = pid;
|
||||
|
||||
//(re)enumerate active devices
|
||||
// delayed need as device deactiavation
|
||||
// then update status menu (on main thread)
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
|
||||
{
|
||||
//update on on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
//update status menu
|
||||
[((AppDelegate*)[[NSApplication sharedApplication] delegate]).statusBarItemController setActiveDevices:[self enumerateActiveDevices]];
|
||||
|
||||
});
|
||||
|
||||
}); //dispatch for delay
|
||||
}
|
||||
|
||||
}];
|
||||
|
@ -494,21 +455,7 @@ extern os_log_t logHandle;
|
|||
[self processAttributions:newAudioAttributions newCameraAttributions:newCameraAttributions];
|
||||
|
||||
}//sync
|
||||
|
||||
//(re)enumerate active devices
|
||||
// delayed need as device deactiavation
|
||||
// then update status menu (on main thread)
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
|
||||
{
|
||||
//update on on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
//update status menu
|
||||
[((AppDelegate*)[[NSApplication sharedApplication] delegate]).statusBarItemController setActiveDevices:[self enumerateActiveDevices]];
|
||||
|
||||
});
|
||||
|
||||
}); //dispatch for delay
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
|
@ -813,7 +760,7 @@ extern os_log_t logHandle;
|
|||
|
||||
//delay
|
||||
// need time for logging to grab responsible process
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
|
||||
//client
|
||||
Client* client = nil;
|
||||
|
@ -914,7 +861,7 @@ bail:
|
|||
}
|
||||
|
||||
//camera on?
|
||||
// macOS 13.3, use this as trigger
|
||||
// macOS 13.3+, use this as trigger
|
||||
// older version send event via log monitor
|
||||
if (@available(macOS 13.3, *)) {
|
||||
|
||||
|
@ -932,7 +879,7 @@ bail:
|
|||
|
||||
//delay
|
||||
// need time for logging to grab responsible process
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
|
||||
//client
|
||||
Client* client = nil;
|
||||
|
@ -965,7 +912,7 @@ bail:
|
|||
|
||||
//init event
|
||||
// process (client) and device are nil
|
||||
event = [[Event alloc] init:nil device:nil deviceType:Device_Camera state:NSControlStateValueOff];
|
||||
event = [[Event alloc] init:nil device:device deviceType:Device_Camera state:NSControlStateValueOff];
|
||||
|
||||
//handle event
|
||||
[self handleEvent:event];
|
||||
|
@ -1363,13 +1310,13 @@ bail:
|
|||
|
||||
//ignore if last event was same state
|
||||
if( (deviceLastEvent.state == event.state) &&
|
||||
([event.timestamp timeIntervalSinceDate:deviceLastEvent.timestamp] < 2.0f) )
|
||||
([event.timestamp timeIntervalSinceDate:deviceLastEvent.timestamp] < 1.0f) )
|
||||
{
|
||||
//set result
|
||||
result = NOTIFICATION_SPURIOUS;
|
||||
|
||||
//dbg msg
|
||||
os_log_debug(logHandle, "ignoring event as it was same state as last (%ld), and happened <2.0s ago", (long)event.state);
|
||||
os_log_debug(logHandle, "ignoring event as it was same state as last (%ld), and happened <1.0s ago", (long)event.state);
|
||||
|
||||
//bail
|
||||
goto bail;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
@import Cocoa;
|
||||
|
||||
@interface StatusBarItem : NSObject <NSPopoverDelegate>
|
||||
@interface StatusBarItem : NSObject <NSPopoverDelegate, NSMenuDelegate>
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -89,6 +89,9 @@ enum menuItems
|
|||
//set menu
|
||||
self.statusItem.menu = menu;
|
||||
|
||||
//set delegate
|
||||
self.statusItem.menu.delegate = self;
|
||||
|
||||
//set action handler for all menu items
|
||||
for(int i=toggle; i<end; i++)
|
||||
{
|
||||
|
@ -445,4 +448,26 @@ bail:
|
|||
return;
|
||||
}
|
||||
|
||||
//menu delegate method
|
||||
// menu will open: update active devices
|
||||
-(void)menuWillOpen:(NSMenu *)menu
|
||||
{
|
||||
//av monitor
|
||||
AVMonitor* avMonitor = nil;
|
||||
|
||||
//status bar item controller
|
||||
StatusBarItem* statusBarItemController = nil;
|
||||
|
||||
//grab
|
||||
avMonitor = ((AppDelegate*)[[NSApplication sharedApplication] delegate]).avMonitor;
|
||||
|
||||
//grab
|
||||
statusBarItemController = ((AppDelegate*)[[NSApplication sharedApplication] delegate]).statusBarItemController;
|
||||
|
||||
//enumerate and update
|
||||
[statusBarItemController setActiveDevices:[avMonitor enumerateActiveDevices]];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue