14
14
#import " QSScreenshots.h"
15
15
#import " QSDonationController.h"
16
16
17
-
18
17
#import " QSIntValueTransformer.h"
19
18
20
19
#import < PermissionsKit/PermissionsKit.h>
@@ -28,6 +27,7 @@ - (void)handleURL:(NSURL *)url;
28
27
29
28
static QSController *defaultController = nil ;
30
29
30
+
31
31
@implementation QSController
32
32
33
33
@synthesize crashReportPath;
@@ -834,23 +834,36 @@ -(void)checkForAccessibilityPermission {
834
834
}
835
835
836
836
- (void )checkAccessibilityPermissions {
837
+ [accessibilityPermissionWindow setLevel: NSNormalWindowLevel ];
838
+
837
839
// Prompt for accessibility permissions on macOS Mojave and later.
838
840
BOOL hasAccessibility = [self hasAccessibilityPermission ];
839
841
BOOL hasFullDisk = [MPPermissionsKit authorizationStatusForPermissionType: MPPermissionTypeFullDiskAccess] == MPAuthorizationStatusAuthorized;
840
842
BOOL hasContacts = [MPPermissionsKit authorizationStatusForPermissionType: MPPermissionTypeContacts] == MPAuthorizationStatusAuthorized;
841
843
BOOL hasCalendars = [MPPermissionsKit authorizationStatusForPermissionType: MPPermissionTypeCalendar] == MPAuthorizationStatusAuthorized;
842
844
BOOL hasReminders = [MPPermissionsKit authorizationStatusForPermissionType: MPPermissionTypeReminders] == MPAuthorizationStatusAuthorized;
845
+
846
+ BOOL hasScreenshot;
847
+ if (hasScreenshotPermissionOnStartup) {
848
+ hasScreenshot = YES ;
849
+ } else {
850
+ // only call this if the user has actually clicked the screenshot button
851
+ // this is a kind of hack, since the API for detecting if screenshot permission is enabled is buggy
852
+ hasScreenshot = hasClickedScreenshotButton;
853
+ }
854
+
843
855
[accessibilityButton setEnabled: !hasAccessibility];
844
856
[fullDiskButton setEnabled: !hasFullDisk];
845
857
[contactsButton setEnabled: !hasContacts];
846
858
[calendarsButton setEnabled: !hasCalendars || !hasReminders];
859
+ [screenshotButton setEnabled: !hasScreenshot];
847
860
848
861
[closeAccessibilityWindowButton setEnabled: (hasAccessibility && hasFullDisk)];
849
862
850
863
if (hasAccessibility && hasFullDisk && hasCalendars && hasContacts && hasReminders) {
851
864
[accessibilityPermissionWindow close ];
852
865
} else if (!accessibilityChecker) {
853
- accessibilityChecker = [NSTimer scheduledTimerWithTimeInterval: 1 repeats: YES block: ^(NSTimer * _Nonnull timer) {
866
+ accessibilityChecker = [NSTimer scheduledTimerWithTimeInterval: 0.5 repeats: YES block: ^(NSTimer * _Nonnull timer) {
854
867
[self checkAccessibilityPermissions ];
855
868
}];
856
869
[[NSRunLoop currentRunLoop ] addTimer: accessibilityChecker forMode: NSModalPanelRunLoopMode ];
@@ -860,11 +873,16 @@ - (void)checkAccessibilityPermissions {
860
873
-(IBAction )showAccessibilityPrompt: (id )sender {
861
874
[[NSNotificationCenter defaultCenter ] addObserver: self selector: @selector (closeAccessibilityPrompt: ) name: NSWindowWillCloseNotification object: accessibilityPermissionWindow];
862
875
[closeAccessibilityWindowButton setEnabled: NO ];
863
-
864
876
[accessibilityPermissionWindow setIsVisible: YES ];
877
+ hasClickedScreenshotButton = NO ;
878
+ if (@available (macOS 10.15 , *)) {
879
+ hasScreenshotPermissionOnStartup = CGPreflightScreenCaptureAccess ();
880
+ } else {
881
+ // below 10.15, no need to give permissions
882
+ hasScreenshotPermissionOnStartup = YES ;
883
+ }
865
884
[self checkAccessibilityPermissions ];
866
885
[NSApp runModalForWindow: accessibilityPermissionWindow];
867
-
868
886
}
869
887
870
888
- (IBAction )closeAccessibilityPrompt: (NSNotification *)notif {
@@ -892,7 +910,11 @@ -(IBAction)launchPrivacyPreferences:(id)sender {
892
910
[MPPermissionsKit requestAuthorizationForPermissionType: MPPermissionTypeReminders withCompletion: ^(MPAuthorizationStatus status) {
893
911
}];
894
912
}];
895
-
913
+ } else if (sender == screenshotButton) {
914
+ hasClickedScreenshotButton = YES ;
915
+ if (@available (macOS 10.15 , *)) {
916
+ CGRequestScreenCaptureAccess ();
917
+ }
896
918
} else {
897
919
[accessibilityPermissionWindow close ];
898
920
}
0 commit comments