fix: could sometimes freeze on the permission window

#5112
This commit is contained in:
lwouis committed 2025-12-13 20:10:52 +01:00
1 parent 741e7902db
commit 43838e1ccc
2 files changed
+21 -20

No files matched your search

+1 -1
View File
@@ -36,6 +36,7 @@ They helped [localize the app](https://poeditor.com/join/project/8AOEZ0eAZE):
* 73
* A
* a774 nn
* Aamirsuleman
* Aarni Koskela
* Abdulelah
@@ -267,7 +268,6 @@ They helped [localize the app](https://poeditor.com/join/project/8AOEZ0eAZE):
* Trevor
* Tsilimpotis Dimitrios
* Umutakkaya1996
* User23483
* Vadym
* Vijayant Saini
* Vincent Orback
+20 -19
View File
@@ -22,9 +22,7 @@ class SystemPermissions {
static func pollPermissionsToUpdatePermissionsWindow(_ startupBlock: @escaping () -> Void) {
timerPermissionsToUpdatePermissionsWindow = Timer(timeInterval: 0.1, repeats: true) { _ in
DispatchQueue.main.async {
checkPermissionsToUpdatePermissionsWindow(startupBlock)
}
checkPermissionsToUpdatePermissionsWindow(startupBlock)
}
timerPermissionsToUpdatePermissionsWindow!.tolerance = 0.1
CFRunLoopAddTimer(BackgroundWork.systemPermissionsThread.runLoop, timerPermissionsToUpdatePermissionsWindow!, .commonModes)
@@ -70,22 +68,24 @@ class SystemPermissions {
AccessibilityPermission.update()
ScreenRecordingPermission.update()
Logger.debug(AccessibilityPermission.status, ScreenRecordingPermission.status, preStartupPermissionsPassed)
Menubar.togglePermissionCallout(ScreenRecordingPermission.status == .skipped)
if AccessibilityPermission.status != App.app.permissionsWindow?.accessibilityView?.permissionStatus {
App.app.permissionsWindow?.accessibilityView.updatePermissionStatus(AccessibilityPermission.status)
}
if #available(macOS 10.15, *), ScreenRecordingPermission.status != App.app.permissionsWindow?.screenRecordingView?.permissionStatus {
App.app.permissionsWindow?.screenRecordingView?.updatePermissionStatus(ScreenRecordingPermission.status)
}
if !preStartupPermissionsPassed {
if AccessibilityPermission.status != .notGranted && ScreenRecordingPermission.status != .notGranted {
preStartupPermissionsPassed = true
App.app.permissionsWindow?.close()
startupBlock()
DispatchQueue.main.async {
Menubar.togglePermissionCallout(ScreenRecordingPermission.status == .skipped)
if AccessibilityPermission.status != App.app.permissionsWindow?.accessibilityView?.permissionStatus {
App.app.permissionsWindow?.accessibilityView.updatePermissionStatus(AccessibilityPermission.status)
}
} else {
if AccessibilityPermission.status == .notGranted || ScreenRecordingPermission.status == .notGranted {
App.app.restart()
if #available(macOS 10.15, *), ScreenRecordingPermission.status != App.app.permissionsWindow?.screenRecordingView?.permissionStatus {
App.app.permissionsWindow?.screenRecordingView?.updatePermissionStatus(ScreenRecordingPermission.status)
}
if !preStartupPermissionsPassed {
if AccessibilityPermission.status != .notGranted && ScreenRecordingPermission.status != .notGranted {
preStartupPermissionsPassed = true
App.app.permissionsWindow?.close()
startupBlock()
}
} else {
if AccessibilityPermission.status == .notGranted || ScreenRecordingPermission.status == .notGranted {
App.app.restart()
}
}
}
}
@@ -151,6 +151,7 @@ class ScreenRecordingPermission {
private static func checkWithSCShareableContent() -> Bool {
return runWithTimeout { completion in
SCShareableContent.getWithCompletionHandler { shareableContent, error in
// this callback runs on a GCD queue, not on the thread that called getWithCompletionHandler
completion(error != nil ? false : (shareableContent != nil))
}
}
@@ -172,7 +173,7 @@ class ScreenRecordingPermission {
}
}
private static func runWithTimeout(_ block: @escaping (@escaping (Bool) -> Void) -> Void) -> Bool{
private static func runWithTimeout(_ block: @escaping (@escaping (Bool) -> Void) -> Void) -> Bool {
let semaphore = DispatchSemaphore(value: 0)
var result = false
block { r in