perf: prevent possible frequent permissions check
This commit is contained in:
1 parent
3f2f391c93
commit
216563b635
2 files changed
+12
-4
No files matched your search
@@ -5,6 +5,7 @@ import ScreenCaptureKit.SCShareableContent
|
||||
class SystemPermissions {
|
||||
static var preStartupPermissionsPassed = false
|
||||
private static var timer: DispatchSourceTimer!
|
||||
private static var timerIsFrequent = false
|
||||
|
||||
static func ensurePermissionsAreGranted() {
|
||||
timer = DispatchSource.makeTimerSource(queue: BackgroundWork.permissionsCheckOnTimerQueue.strongUnderlyingQueue)
|
||||
@@ -23,6 +24,11 @@ class SystemPermissions {
|
||||
checkPermissionsPreStartup()
|
||||
} else {
|
||||
checkPermissionsPostStartup()
|
||||
if App.app.permissionsWindow.isVisible && !timerIsFrequent {
|
||||
setFrequentTimer()
|
||||
} else if !App.app.permissionsWindow.isVisible && timerIsFrequent {
|
||||
setInfrequentTimer()
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
Menubar.togglePermissionCallout(ScreenRecordingPermission.status != .granted)
|
||||
@@ -53,14 +59,17 @@ class SystemPermissions {
|
||||
}
|
||||
|
||||
static func setInfrequentTimer() {
|
||||
timerIsFrequent = false
|
||||
timer.schedule(deadline: .now() + 5, repeating: 5, leeway: .seconds(1))
|
||||
}
|
||||
|
||||
static func setFrequentTimer() {
|
||||
timerIsFrequent = true
|
||||
timer.schedule(deadline: .now(), repeating: 0.5, leeway: .milliseconds(500))
|
||||
}
|
||||
|
||||
private static func setImmediateTimer() {
|
||||
timerIsFrequent = false
|
||||
timer.schedule(deadline: .now(), repeating: .never, leeway: .never)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ class PermissionsWindow: NSWindow {
|
||||
override var canBecomeKey: Bool { canBecomeKey_ }
|
||||
|
||||
convenience init() {
|
||||
self.init(contentRect: .zero, styleMask: [.titled, .miniaturizable, .closable], backing: .buffered, defer: false)
|
||||
self.init(contentRect: .zero, styleMask: [.titled, .closable], backing: .buffered, defer: false)
|
||||
delegate = self
|
||||
setupWindow()
|
||||
setupView()
|
||||
@@ -16,10 +16,10 @@ class PermissionsWindow: NSWindow {
|
||||
func show() {
|
||||
guard !isVisible else { return }
|
||||
Logger.debug { "" }
|
||||
SystemPermissions.setFrequentTimer()
|
||||
center()
|
||||
App.shared.activate(ignoringOtherApps: true)
|
||||
makeKeyAndOrderFront(nil)
|
||||
SystemPermissions.setFrequentTimer()
|
||||
}
|
||||
|
||||
func updatePermissionViews() {
|
||||
@@ -33,7 +33,7 @@ class PermissionsWindow: NSWindow {
|
||||
title = NSLocalizedString("AltTab needs some permissions", comment: "")
|
||||
hidesOnDeactivate = false
|
||||
isReleasedWhenClosed = false
|
||||
styleMask.insert([.miniaturizable, .closable])
|
||||
styleMask.insert([.closable])
|
||||
}
|
||||
|
||||
private func setupView() {
|
||||
@@ -99,7 +99,6 @@ extension PermissionsWindow: NSWindowDelegate {
|
||||
return false // prevent the close; termination will close everything once
|
||||
}
|
||||
}
|
||||
SystemPermissions.setInfrequentTimer()
|
||||
return true
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user