Overriding "Edited" in window title for NSDocument

cocoa, nsdocument, nswindow, nswindowcontroller, osx-lion

Solution

Several options:

To get a pointer to the "dash", look for a TextField in [window.contentView.superview.subviews] with a stringValue equals to "-". You can set its text to an empty string as well.

@implementation NSWindow (DashRetrivalMethod)
- (NSTextField*)versionsDashTextField
{
    NSTextField* res = nil;
    NSView* themeFrame = [self.contentView superview];
    for (NSView* tmp in [themeFrame subviews])
    {
        if ([tmp isKindOfClass:[NSTextField class]])
        {
            if ([[(NSTextField*)tmp stringValue] isEqualToString:@"—"])
            {
                  res = (NSTextField*)tmp;
                  break;
            }
        }
    }
    return res;
}
@end

You can override NSWindow's -setRepresentedURL:. This would also affect the NSWindowDocumentIconButton and the popup menu, but you can manually create it if you want by: [NSWindow standardWindowButton: NSWindowDocumentIconButton].

Override one of these three NSDocument's undocumented methods:

// Always return here NO if you don't want the version button to appear. 
// This seems to be the cleanest options, besides the fact that you are 
/// overriding a private method.
- (BOOL)_shouldShowAutosaveButtonForWindow:(NSWindow*)window;

// Call super with NO
- (void)_setShowAutosaveButton:(BOOL)flag; 

// Here the button and the dash are actually created
- (void)_endVersionsButtonUpdates; 

// Here Cocoa hide or unhide the edited button
- (void)_updateDocumentEditedAndAnimate:(BOOL)flag

Problem

How do I prevent a window title from displaying "Edited" for an NSDocument which is dirty? I'm managing saving and autosaving myself, using a web service, and just don't want the distraction in the title bar. I've tried overriding: - NSDocument's `-isDocumentEdited` and `-hasUnautosavedChanges` always to return `NO`. - `-[NSWindowController setDocumentEdited]` to do nothing, or always to use `NO` regardless of the parameter's actual value. - `-[NSWindowController synchronizeWindowTitleWithDocumentName]` to do nothing. - `-[NSWindow setDocumentEdited]` to do nothing, or always to use `NO` regardless of the parameter's actual value. In all cases, the title bar still changes to Edited when I make changes to a saved document. If I override `-[NSDocument updateChangeCount:]` and `-[NSDocument updateChangeCountWithToken:forSaveOperation:]` to do nothing, I can prevent this from happening, but it affects saving, autosaving, and other document behaviors, too. I also tried this: ``` [[self.window standardWindowButton: NSWindowDocumentVersionsButton] setTitle:nil]; ``` That displayed a blank string instead of Edited, but the dash still appeared – the one which normally separates the document name and Edited. Any idea how to pry apart this part of the window from the document?

Original source