From 05ac9a01422169d87d8354d4a42a8cfc7718cd45 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 25 Sep 2018 11:18:13 +0200 Subject: [PATCH] Added Accessibilty verification for macOS 10.14 to allow for better user experince --- MacPass/MPAutotypeDaemon.h | 5 ++++- MacPass/MPAutotypeDaemon.m | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/MacPass/MPAutotypeDaemon.h b/MacPass/MPAutotypeDaemon.h index 336ef993..b6561014 100644 --- a/MacPass/MPAutotypeDaemon.h +++ b/MacPass/MPAutotypeDaemon.h @@ -34,10 +34,13 @@ @property (strong) IBOutlet NSWindow *matchSelectionWindow; @property (weak) IBOutlet NSPopUpButton *matchSelectionButton; @property (readonly, strong) DDHotKey *registredHotKey; +@property (readonly, strong, class) MPAutotypeDaemon *defaultDaemon; +@property (nonatomic, readonly) BOOL autotypeSupported; // YES if the system allows for Autotype. NO if the user has denied this. -+ (instancetype)defaultDaemon; - (instancetype)init NS_UNAVAILABLE; +- (void)checkForAccessibiltyPermissions; + - (void)performAutotypeForEntry:(KPKEntry *)entry; - (void)performAutotypeForEntry:(KPKEntry *)entry overrideSequence:(NSString *)sequence; - (void)selectAutotypeCandiate:(MPAutotypeContext *)context; diff --git a/MacPass/MPAutotypeDaemon.m b/MacPass/MPAutotypeDaemon.m index e41609df..afbce23e 100644 --- a/MacPass/MPAutotypeDaemon.m +++ b/MacPass/MPAutotypeDaemon.m @@ -55,6 +55,8 @@ NSString *const kMPProcessIdentifierKey = @"kMPProcessIdentifierKey"; @implementation MPAutotypeDaemon +@dynamic autotypeSupported; + #pragma mark - #pragma mark Lifecylce @@ -93,6 +95,7 @@ static MPAutotypeDaemon *_sharedInstance; name:NSWorkspaceDidDeactivateApplicationNotification object:nil]; } + [self checkForAccessibiltyPermissions]; return self; } @@ -105,6 +108,14 @@ static MPAutotypeDaemon *_sharedInstance; #pragma mark - #pragma mark Properties +- (BOOL)autotypeSupported { + if(@available(macOS 10.14, *)) { + return AXIsProcessTrusted(); + } + /* macOS 10.13 and lower allows us to send key events regardless of accessibilty trust */ + return YES; +} + - (void)setEnabled:(BOOL)enabled { if(_enabled != enabled) { _enabled = enabled; @@ -122,6 +133,16 @@ static MPAutotypeDaemon *_sharedInstance; } } +- (void)checkForAccessibiltyPermissions { + if(@available(macOS 10.14, *)) { + CFStringRef keys[] = { kAXTrustedCheckOptionPrompt }; + CFBooleanRef values[] = { kCFBooleanTrue }; + CFDictionaryRef dictRef = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + AXIsProcessTrustedWithOptions(dictRef); + CFRelease(dictRef); + } +} + #pragma mark - #pragma mark Autotype Invocation - (void)performAutotypeForEntry:(KPKEntry *)entry {