Revision: 28458 http://sourceforge.net/p/bibdesk/svn/28458 Author: hofman Date: 2023-11-20 22:17:24 +0000 (Mon, 20 Nov 2023) Log Message: ----------- Implement KVO notifications for keys dependent on user defaults keys changes in preference pane class
Modified Paths: -------------- trunk/bibdesk/BDSKPreferencePane.h trunk/bibdesk/BDSKPreferencePane.m trunk/bibdesk/BibPref_AutoFile.m trunk/bibdesk/BibPref_Cite.m trunk/bibdesk/BibPref_Defaults.m Modified: trunk/bibdesk/BDSKPreferencePane.h =================================================================== --- trunk/bibdesk/BDSKPreferencePane.h 2023-11-19 16:34:10 UTC (rev 28457) +++ trunk/bibdesk/BDSKPreferencePane.h 2023-11-20 22:17:24 UTC (rev 28458) @@ -44,6 +44,7 @@ BDSKPreferenceController *preferenceController; NSUserDefaults *sud; NSMutableArray *observedKeys; + NSMutableDictionary *dependentKeys; } - (id)initWithRecord:(BDSKPreferenceRecord *)aRecord forPreferenceController:(BDSKPreferenceController *)aController; @@ -77,7 +78,7 @@ - (void)willCloseWindow; - (void)addObserverForUserDefaultsKey:(NSString *)key; -- (void)observePriorValueForUserDefaultsKey:(NSString *)key; +- (void)addObserverForUserDefaultsKey:(NSString *)key dependentKey:(NSString *)dependentKey; - (void)observeValueForUserDefaultsKey:(NSString *)key; @end Modified: trunk/bibdesk/BDSKPreferencePane.m =================================================================== --- trunk/bibdesk/BDSKPreferencePane.m 2023-11-19 16:34:10 UTC (rev 28457) +++ trunk/bibdesk/BDSKPreferencePane.m 2023-11-20 22:17:24 UTC (rev 28458) @@ -69,6 +69,7 @@ @catch(id e) {} BDSKDESTROY(observedKeys); } + BDSKDESTROY(dependentKeys); [super dealloc]; } @@ -143,24 +144,39 @@ #pragma mark KVO -- (void)addObserverForUserDefaultsKey:(NSString *)key { +- (void)addObserverForUserDefaultsKey:(NSString *)key dependentKey:(NSString *)dependentKey{ if ([observedKeys containsObject:key]) return; - [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:[@"values." stringByAppendingString:key] options:NSKeyValueObservingOptionPrior context:&BDSKPreferencePaneDefaultsObservationContext]; + [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:[@"values." stringByAppendingString:key] options:dependentKey ? NSKeyValueObservingOptionPrior : 0 context:&BDSKPreferencePaneDefaultsObservationContext]; if (observedKeys == nil) observedKeys = [[NSMutableArray alloc] init]; [observedKeys addObject:key]; + if (dependentKey) { + if (dependentKeys == nil) + dependentKeys = [[NSMutableDictionary alloc] init]; + [dependentKeys setObject:dependentKey forKey:key]; + } } -- (void)observePriorValueForUserDefaultsKey:(NSString *)key {} +- (void)addObserverForUserDefaultsKey:(NSString *)key { + [self addObserverForUserDefaultsKey:key dependentKey:nil]; +} + - (void)observeValueForUserDefaultsKey:(NSString *)key {} - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == &BDSKPreferencePaneDefaultsObservationContext) { - if ([[change objectForKey:NSKeyValueChangeNotificationIsPriorKey] boolValue]) - [self observePriorValueForUserDefaultsKey:[keyPath substringFromIndex:7]]; - else - [self observeValueForUserDefaultsKey:[keyPath substringFromIndex:7]]; + NSString *key = [keyPath substringFromIndex:7]; + NSString *dependentKey = [dependentKeys objectForKey:key]; + BOOL isPrior = [[change objectForKey:NSKeyValueChangeNotificationIsPriorKey] boolValue]; + if (dependentKey) { + if (isPrior) + [self willChangeValueForKey:dependentKey]; + else + [self didChangeValueForKey:dependentKey]; + } + if (isPrior == NO) + [self observeValueForUserDefaultsKey:key]; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } Modified: trunk/bibdesk/BibPref_AutoFile.m =================================================================== --- trunk/bibdesk/BibPref_AutoFile.m 2023-11-19 16:34:10 UTC (rev 28457) +++ trunk/bibdesk/BibPref_AutoFile.m 2023-11-20 22:17:24 UTC (rev 28458) @@ -90,7 +90,7 @@ [self addObserverForUserDefaultsKey:BDSKLocalFileCleanOptionKey]; [self addObserverForUserDefaultsKey:BDSKLocalFileLowercaseKey]; - [self addObserverForUserDefaultsKey:BDSKPapersFolderPathKey]; + [self addObserverForUserDefaultsKey:BDSKPapersFolderPathKey dependentKey:@"hasPapersFolder"]; } - (void)defaultsDidRevert { @@ -356,14 +356,7 @@ #pragma mark KVO -- (void)observePriorValueForUserDefaultsKey:(NSString *)key { - if ([key isEqualToString:BDSKPapersFolderPathKey]) - [self willChangeValueForKey:@"hasPapersFolder"]; -} - - (void)observeValueForUserDefaultsKey:(NSString *)key { - if ([key isEqualToString:BDSKPapersFolderPathKey]) - [self didChangeValueForKey:@"hasPapersFolder"]; [self updateFormatPreviewUI]; } Modified: trunk/bibdesk/BibPref_Cite.m =================================================================== --- trunk/bibdesk/BibPref_Cite.m 2023-11-19 16:34:10 UTC (rev 28457) +++ trunk/bibdesk/BibPref_Cite.m 2023-11-20 22:17:24 UTC (rev 28458) @@ -68,7 +68,7 @@ [self updateCiteCommandUI]; [self addObserverForUserDefaultsKey:BDSKCiteStringKey]; - [self addObserverForUserDefaultsKey:BDSKCiteStartBracketKey]; + [self addObserverForUserDefaultsKey:BDSKCiteStartBracketKey dependentKey:@"useTeXBrackets"]; [self addObserverForUserDefaultsKey:BDSKCiteEndBracketKey]; [self addObserverForUserDefaultsKey:BDSKSeparateCiteKey]; [self addObserverForUserDefaultsKey:BDSKCitePrependTildeKey]; @@ -160,14 +160,7 @@ [self updateTemplates]; } -- (void)observePriorValueForUserDefaultsKey:(NSString *)key { - if ([key isEqualToString:BDSKCiteStartBracketKey]) - [self willChangeValueForKey:@"useTeXBrackets"]; -} - - (void)observeValueForUserDefaultsKey:(NSString *)key { - if ([key isEqualToString:BDSKCiteStartBracketKey]) - [self didChangeValueForKey:@"useTeXBrackets"]; [self updateCiteCommandUI]; } Modified: trunk/bibdesk/BibPref_Defaults.m =================================================================== --- trunk/bibdesk/BibPref_Defaults.m 2023-11-19 16:34:10 UTC (rev 28457) +++ trunk/bibdesk/BibPref_Defaults.m 2023-11-20 22:17:24 UTC (rev 28458) @@ -241,7 +241,7 @@ [defaultFieldsTableView reloadData]; - [self addObserverForUserDefaultsKey:BDSKUseLocalUrlAndUrlKey]; + [self addObserverForUserDefaultsKey:BDSKUseLocalUrlAndUrlKey dependentKey:@"convertURLFields"]; NSTableColumn *tc = [defaultFieldsTableView tableColumnWithIdentifier:DEFAULT_KEY]; CGFloat width = ceil([[tc headerCell] cellSize].width); @@ -747,12 +747,7 @@ #pragma mark KVO -- (void)observePriorValueForUserDefaultsKey:(NSString *)key { - [self willChangeValueForKey:@"convertURLFields"]; -} - - (void)observeValueForUserDefaultsKey:(NSString *)key { - [self didChangeValueForKey:@"convertURLFields"]; // make sure Local-Url and Url are defined as Local File and remote URL fields if ([sud boolForKey:BDSKUseLocalUrlAndUrlKey] && ([customFieldsSet containsObject:BDSKLocalUrlString] == NO || [customFieldsSet containsObject:BDSKUrlString] == NO)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit