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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit