macOS: Ignore bogus reopen because of login item helper
The bogus reopen occurs because the SMLoginItemSetEnabled actually runs the helper app immediately. The helper app attempts to launch the main app, causing a reopen Apple event (rapp) to be sent. Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
parent
717bc8a26f
commit
493c7b102e
|
@ -58,6 +58,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows: Bool) -> Bool {
|
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows: Bool) -> Bool {
|
||||||
|
if let appleEvent = NSAppleEventManager.shared().currentAppleEvent {
|
||||||
|
if LaunchedAtLoginDetector.isReopenedByLoginItemHelper(reopenAppleEvent: appleEvent) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
if hasVisibleWindows {
|
if hasVisibleWindows {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,25 @@
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
|
||||||
class LaunchedAtLoginDetector {
|
class LaunchedAtLoginDetector {
|
||||||
|
static let launchCode = "LaunchedByWireGuardLoginItemHelper"
|
||||||
|
|
||||||
static func isLaunchedAtLogin(openAppleEvent: NSAppleEventDescriptor) -> Bool {
|
static func isLaunchedAtLogin(openAppleEvent: NSAppleEventDescriptor) -> Bool {
|
||||||
let launchCode = "LaunchedByWireGuardLoginItemHelper"
|
|
||||||
guard isOpenEvent(openAppleEvent) else { return false }
|
guard isOpenEvent(openAppleEvent) else { return false }
|
||||||
guard let propData = openAppleEvent.paramDescriptor(forKeyword: keyAEPropData) else { return false }
|
guard let propData = openAppleEvent.paramDescriptor(forKeyword: keyAEPropData) else { return false }
|
||||||
return propData.stringValue == launchCode
|
return propData.stringValue == launchCode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static func isReopenedByLoginItemHelper(reopenAppleEvent: NSAppleEventDescriptor) -> Bool {
|
||||||
|
guard isReopenEvent(reopenAppleEvent) else { return false }
|
||||||
|
guard let propData = reopenAppleEvent.paramDescriptor(forKeyword: keyAEPropData) else { return false }
|
||||||
|
return propData.stringValue == launchCode
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func isOpenEvent(_ event: NSAppleEventDescriptor) -> Bool {
|
private func isOpenEvent(_ event: NSAppleEventDescriptor) -> Bool {
|
||||||
return event.eventClass == kCoreEventClass && event.eventID == kAEOpenApplication
|
return event.eventClass == kCoreEventClass && event.eventID == kAEOpenApplication
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func isReopenEvent(_ event: NSAppleEventDescriptor) -> Bool {
|
||||||
|
return event.eventClass == kCoreEventClass && event.eventID == kAEReopenApplication
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue