Revision: 29287
http://sourceforge.net/p/bibdesk/svn/29287
Author: hofman
Date: 2025-07-17 21:09:41 +0000 (Thu, 17 Jul 2025)
Log Message:
-----------
Use callback for commit errors only when having recovery options. Don't show
errors for complex string errors.
Modified Paths:
--------------
trunk/bibdesk/BDSKEditor.m
Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m 2025-07-17 18:20:53 UTC (rev 29286)
+++ trunk/bibdesk/BDSKEditor.m 2025-07-17 21:09:41 UTC (rev 29287)
@@ -570,16 +570,21 @@
}
- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void
*)contextInfo {
- if (didRecover) {
- // we must be committing the citeKeyField with fragile characters
- editorFlags.allowFragileCharacters = YES;
- NSTextView *textView = (NSTextView *)[citeKeyField currentEditor];
- NSArray *selection = [textView selectedRanges];
- if ([[self window] makeFirstResponder:[self window]] == NO)
- didRecover = NO;
- else if ([[self window] makeFirstResponder:citeKeyField])
- [(NSTextView *)[citeKeyField currentEditor]
setSafeSelectedRanges:selection];
- editorFlags.allowFragileCharacters = NO;
+ NSTextView *textView = (NSTextView *)[citeKeyField currentEditor];
+ if (textView) {
+ if (didRecover) {
+ // we must be committing the citeKeyField with fragile characters
+ NSArray *selection = [textView selectedRanges];
+ editorFlags.allowFragileCharacters = YES;
+ if ([[self window] makeFirstResponder:[self window]] == NO)
+ didRecover = NO;
+ else if ([[self window] makeFirstResponder:citeKeyField])
+ [(NSTextView *)[citeKeyField currentEditor]
setSafeSelectedRanges:selection];
+ editorFlags.allowFragileCharacters = NO;
+ } else {
+ NSCharacterSet *invalidSet = [[BDSKTypeManager sharedManager]
fragileCiteKeyCharacterSet];
+ [citeKeyField setStringValue:[[textView string]
stringByReplacingCharactersInSet:invalidSet withString:@""]];
+ }
}
NSInvocation *invocation = (NSInvocation *)CFBridgingRelease(contextInfo);
if (invocation) {
@@ -588,11 +593,10 @@
}
}
-- (void)commitEditingWithDelegate:(id)delegate
didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo
-{
+- (void)commitEditingWithDelegate:(id)delegate
didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo {
NSError *error = nil;
BOOL didCommit = [self commitEditingAndReturnRecoverableError:&error];
- if (didCommit == NO) {
+ if (didCommit == NO && [error localizedRecoveryOptions]) {
NSInvocation *invocation = nil;
if (delegate && didCommitSelector) {
invocation = [NSInvocation invocationWithTarget:delegate
selector:didCommitSelector];
@@ -601,13 +605,17 @@
[invocation setArgument:&contextInfo atIndex:4];
}
[self presentError:error modalForWindow:[self window] delegate:self
didPresentSelector:@selector(didPresentErrorWithRecovery:contextInfo:)
contextInfo:(void *)CFBridgingRetain(invocation)];
- } else if (delegate && didCommitSelector) {
- // - (void)editor:(id)editor didCommit:(BOOL)didCommit
contextInfo:(void *)contextInfo
- dispatch_async(dispatch_get_main_queue(), ^{
- void (*didCommitImp)(id, SEL, id, BOOL, void *) = (void (*)(id,
SEL, id, BOOL, void *))[delegate methodForSelector:didCommitSelector];
- if (didCommitImp)
- didCommitImp(delegate, didCommitSelector, self, didCommit,
contextInfo);
- });
+ } else {
+ if (didCommit == NO && error && [error code] !=
kBDSKComplexStringError)
+ [self presentError:error modalForWindow:[self window] delegate:nil
didPresentSelector:NULL contextInfo:NULL];
+ if (delegate && didCommitSelector) {
+ // - (void)editor:(id)editor didCommit:(BOOL)didCommit
contextInfo:(void *)contextInfo
+ dispatch_async(dispatch_get_main_queue(), ^{
+ void (*didCommitImp)(id, SEL, id, BOOL, void *) = (void
(*)(id, SEL, id, BOOL, void *))[delegate methodForSelector:didCommitSelector];
+ if (didCommitImp)
+ didCommitImp(delegate, didCommitSelector, self, didCommit,
contextInfo);
+ });
+ }
}
}
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