diff --git a/MacPass/Base.lproj/EntryInspectorView.xib b/MacPass/Base.lproj/EntryInspectorView.xib index d4011edc..6597ca82 100644 --- a/MacPass/Base.lproj/EntryInspectorView.xib +++ b/MacPass/Base.lproj/EntryInspectorView.xib @@ -263,7 +263,7 @@ - + @@ -523,7 +523,7 @@ - + @@ -778,7 +778,7 @@ - + @@ -878,7 +878,7 @@ - + diff --git a/MacPass/Base.lproj/GeneralSettings.xib b/MacPass/Base.lproj/GeneralSettings.xib index 9ee986fa..8e1daadb 100644 --- a/MacPass/Base.lproj/GeneralSettings.xib +++ b/MacPass/Base.lproj/GeneralSettings.xib @@ -1,9 +1,9 @@ - - + + - - + + @@ -12,6 +12,7 @@ + @@ -21,16 +22,16 @@ - + - - + + - + - - + + @@ -41,7 +42,7 @@ - + @@ -61,7 +62,7 @@ - + @@ -88,14 +89,14 @@ - - + + @@ -109,7 +110,7 @@ - + @@ -128,7 +129,19 @@ + + + + + + @@ -149,18 +162,15 @@ - - - - - + + @@ -188,8 +198,6 @@ - - @@ -202,7 +210,7 @@ - + diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index 7be47a0b..1dc7000e 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -101,7 +101,7 @@ NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDi /* We want to inform anyone about the changes to keyFile remembering */ [self bind:NSStringFromSelector(@selector(isAllowedToStoreKeyFile)) - toObject:[NSUserDefaultsController sharedUserDefaultsController] + toObject:NSUserDefaultsController.sharedUserDefaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases] options:nil]; } diff --git a/MacPass/MPCustomFieldTableViewDelegate.m b/MacPass/MPCustomFieldTableViewDelegate.m index fd5c5a66..bf26f76d 100644 --- a/MacPass/MPCustomFieldTableViewDelegate.m +++ b/MacPass/MPCustomFieldTableViewDelegate.m @@ -39,6 +39,7 @@ toObject:view withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(objectValue)), NSStringFromSelector(@selector(value))] options:nil]; + // TODO: Move to public KeePassKit API! for(NSControl *control in @[view.labelTextField, view.valueTextField, view.removeButton ]) { [control bind:NSEnabledBinding @@ -53,9 +54,8 @@ view.observer = tableView.window.windowController.document; - //[view.removeButton bind:NSVisibleBinding toObject:view.valueTextField withKeyPath:@"" options:nil]; - return view; } + @end diff --git a/MacPass/MPEntryInspectorViewController.h b/MacPass/MPEntryInspectorViewController.h index ca568a28..80e7eae6 100644 --- a/MacPass/MPEntryInspectorViewController.h +++ b/MacPass/MPEntryInspectorViewController.h @@ -42,7 +42,7 @@ @property (weak) IBOutlet NSTableView *attachmentTableView; /* Custom Fields */ -@property (weak) IBOutlet NSTableView *customFieldsTableView; +@property (strong) IBOutlet NSTableView *customFieldsTableView; @property (weak) IBOutlet NSButton *showCustomDataButton; /* Autotype */ diff --git a/MacPass/MPGeneralSettingsController.h b/MacPass/MPGeneralSettingsController.h index 4e206ce2..8355e88b 100644 --- a/MacPass/MPGeneralSettingsController.h +++ b/MacPass/MPGeneralSettingsController.h @@ -16,6 +16,7 @@ @property (weak) IBOutlet NSPopUpButton *clearPasteboardTimeoutPopup; @property (weak) IBOutlet NSPopUpButton *idleTimeOutPopup; @property (weak) IBOutlet NSButton *lockOnSleepCheckButton; +@property (weak) IBOutlet NSButton *lockOnLogoutCheckButton; @property (weak) IBOutlet NSButton *reopenLastDatabase; @property (weak) IBOutlet NSButton *createUntitledOnActivation; @property (weak) IBOutlet NSButton *rememberKeyFileCheckButton; diff --git a/MacPass/MPGeneralSettingsController.m b/MacPass/MPGeneralSettingsController.m index 4ccdd8ec..cc46af41 100644 --- a/MacPass/MPGeneralSettingsController.m +++ b/MacPass/MPGeneralSettingsController.m @@ -36,6 +36,7 @@ NSString *const MPGeneralSetingsIdentifier = @"GeneralSettingsTab"; [self.clearPasteboardOnQuitCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyClearPasteboardOnQuit] options:nil]; [self.clearPasteboardTimeoutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPasteboardClearTimeout] options:nil]; [self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil]; + [self.lockOnLogoutCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil]; [self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil]; [self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil]; [self.rememberKeyFileCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases] options:nil]; diff --git a/MacPass/MPLockDaemon.m b/MacPass/MPLockDaemon.m index 8c6e3129..4cc9e383 100644 --- a/MacPass/MPLockDaemon.m +++ b/MacPass/MPLockDaemon.m @@ -13,6 +13,7 @@ @interface MPLockDaemon () @property (nonatomic,assign) BOOL lockOnSleep; +@property (nonatomic,assign) BOOL lockOnLogout; @property (nonatomic,assign) NSUInteger idleLockTime; @property (nonatomic,strong) id eventHandler; @property (nonatomic,strong) NSTimer *idleCheckTimer; @@ -43,6 +44,7 @@ static MPLockDaemon *_sharedInstance; NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController]; [self bind:NSStringFromSelector(@selector(lockOnSleep)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil]; [self bind:NSStringFromSelector(@selector(idleLockTime)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil]; + [self bind:NSStringFromSelector(@selector(lockOnLogout)) toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil]; } return self; } @@ -55,6 +57,18 @@ static MPLockDaemon *_sharedInstance; [NSEvent removeMonitor:self.eventHandler]; } +- (void)setLockOnLogout:(BOOL)lockOnLogout { + if(_lockOnLogout != lockOnLogout) { + _lockOnLogout = lockOnLogout; + if(_lockOnLogout) { + [NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willLogOutNotification:) name:NSWorkspaceSessionDidResignActiveNotification object:nil]; + } + else { + [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:@"" object:nil]; + } + } +} + - (void)setLockOnSleep:(BOOL)lockOnSleep { if(_lockOnSleep != lockOnSleep) { _lockOnSleep = lockOnSleep; @@ -62,7 +76,7 @@ static MPLockDaemon *_sharedInstance; [[NSWorkspace sharedWorkspace].notificationCenter addObserver:self selector:@selector(_willSleepNotification:) name:NSWorkspaceWillSleepNotification object:nil]; } else { - [[NSWorkspace sharedWorkspace].notificationCenter removeObserver:self]; + [[NSWorkspace sharedWorkspace].notificationCenter removeObserver:self name:NSWorkspaceWillSleepNotification object:nil]; } } } @@ -79,6 +93,9 @@ static MPLockDaemon *_sharedInstance; } } +- (void)_willLogOutNotification:(NSNotification *)notification { + [((MPAppDelegate *)NSApp.delegate) lockAllDocuments]; +} - (void)_willSleepNotification:(NSNotification *)notification { [((MPAppDelegate *)NSApp.delegate) lockAllDocuments]; } diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index 36de2aca..743ce992 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -22,6 +22,7 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyBrowserBundleId; /* Autolock */ APPKIT_EXTERN NSString *const kMPSettingsKeyLockOnSleep; +APPKIT_EXTERN NSString *const kMPSettingskeyLockOnLogout; APPKIT_EXTERN NSString *const kMPSettingsKeyIdleLockTimeOut; /* Autosaving states */ diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index a0bb06d5..8f391ee3 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -18,6 +18,7 @@ NSString *const kMPSettingsKeyBrowserBundleId = @"Browse NSString *const kMPSettingsKeyOpenEmptyDatabaseOnLaunch = @"OpenEmptyDatabaseOnLaunch"; NSString *const kMPSettingsKeyReopenLastDatabaseOnLaunch = @"ReopenLastDatabaseOnLaunch"; NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep"; +NSString *const kMPSettingskeyLockOnLogout = @"LockOnLogout"; NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut"; NSString *const kMPSettingsKeyShowInspector = @"ShowInspector"; NSString *const kMPSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors"; @@ -101,6 +102,7 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO, kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES, kMPSettingsKeyLockOnSleep: @YES, + kMPSettingskeyLockOnLogout: @NO, kMPSettingsKeyIdleLockTimeOut: @0, // 5 minutes kMPSettingsKeyLegacyHideNotes: @NO, kMPSettingsKeyLegacyHidePassword: @YES,