On Dec 11, 2007, at 12:39 PM, Christiaan Hofman wrote: > > On 11 Dec 2007, at 9:30 PM, Adam R. Maxwell wrote: > >> Is there any way we can get rid of the finalize changes stuff or >> endEditingFor:? I think we're bypassing NSDocument and the >> formatters in some cases, because of legacy behavior. I'm thinking >> of -[BibEditor windowShouldClose:] in particular, but >> forceEndEditing is another tricky part to handle correctly. >> > > I don't think so. Without binding, I think explicitly ending editing > is the only way to commit. Why do you say we're bypassing NSDocument?
Not necessarily NSDocument, but when you save, it posts a notification that calls finalizeChanges: on open editors, right? That does a brute force end editing, and the document is saved in spite of any alerts in the editor; I think we should fail to save. It seems preferable to do something conceptually like this in the document: - (BOOL)canSaveDocument{ NSWindowController *wc; NSArray *editors = [self windowControllers]; for(wc in editors) { if ([wc isBibEditor] && [wc didValidate] == NO) return NO; } return YES; } - (IBAction)saveDocument:(id)sender { if ([self canSaveDocument]) [super saveDocument:sender]; else NSBeep() } where didValidate would simply check [[self window] makeFirstResponder:nil]. That should cause any formatters to fire and check their contents, with no forceEndEditing. Same thing in windowShouldClose; it should return NO if [[self window] makeFirstResponder:nil] fails, not if it has an attached sheet as a side effect of the finalize call. There's likely stuff I'm forgetting or just don't see, but it seems like that could simplify the validation code at least. I can't figure out editing; we have a mix of NSControl/NSText/NSFormatter delegates, and also the recordChangingField:toValue: and userChangedField:from:to: stuff...it's not clear which is used for what. -- adam ------------------------------------------------------------------------- SF.Net email is sponsored by: Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Bibdesk-develop mailing list Bibdesk-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-develop