diff --git a/ChangeLog b/ChangeLog index 7624b1d5a..70641a775 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-12-06 Wolfgang Lux + + * Source/NSDocument.m (-undo:, -redo:, -validateMenuItem:): Move + implementation from here ... + * Source/NSWindow.m (-undo:, -redo:, -validateMenuItem:): ... to + here. Also validate close, miniaturize, and zoom actions. + 2008-12-06 Richard Frith-Macdonald * Source/NSSound.m: diff --git a/Source/NSDocument.m b/Source/NSDocument.m index 38044f2e7..0e4bff7eb 100644 --- a/Source/NSDocument.m +++ b/Source/NSDocument.m @@ -1319,46 +1319,6 @@ originalContentsURL: (NSURL *)orig { result = ([self fileName] != nil && [self isDocumentEdited]); } - else if (sel_eq(action, @selector(undo:))) - { - if (_undo_manager == nil) - { - result = NO; - } - else - { - if ([_undo_manager canUndo]) - { - [anItem setTitle: [_undo_manager undoMenuItemTitle]]; - result = YES; - } - else - { - [anItem setTitle: [_undo_manager undoMenuTitleForUndoActionName: @""]]; - result = NO; - } - } - } - else if (sel_eq(action, @selector(redo:))) - { - if (_undo_manager == nil) - { - result = NO; - } - else - { - if ([_undo_manager canRedo]) - { - [anItem setTitle: [_undo_manager redoMenuItemTitle]]; - result = YES; - } - else - { - [anItem setTitle: [_undo_manager redoMenuTitleForUndoActionName: @""]]; - result = NO; - } - } - } return result; } @@ -1743,14 +1703,4 @@ originalContentsURL: (NSURL *)orig [self updateChangeCount: NSChangeDone]; } -- (void) undo: (id)sender -{ - [[self undoManager] undo]; -} - -- (void) redo: (id)sender -{ - [[self undoManager] redo]; -} - @end diff --git a/Source/NSWindow.m b/Source/NSWindow.m index 12b43afd4..8b6c04634 100644 --- a/Source/NSWindow.m +++ b/Source/NSWindow.m @@ -50,6 +50,7 @@ #include #include #include +#include #include "AppKit/NSApplication.h" #include "AppKit/NSButton.h" @@ -2979,6 +2980,16 @@ resetCursorRectsForView(NSView *theView) } } +- (void) undo: (id)sender +{ + [[self undoManager] undo]; +} + +- (void) redo: (id)sender +{ + [[self undoManager] redo]; +} + /** If YES, then the window is released when the close method is called. */ @@ -4753,6 +4764,73 @@ current key view.
_f.displays_when_screen_profile_changes = flag; } +/* + * Menu item validation + */ + +- (BOOL)validateMenuItem: (NSMenuItem *)anItem +{ + BOOL result = YES; + SEL action = [anItem action]; + + if (sel_eq(action, @selector(performClose:))) + { + result = ([self styleMask] & NSClosableWindowMask) ? YES : NO; + } + else if (sel_eq(action, @selector(performMiniaturize:))) + { + result = ([self styleMask] & NSMiniaturizableWindowMask) ? YES : NO; + } + else if (sel_eq(action, @selector(performZoom:))) + { + result = ([self styleMask] & NSResizableWindowMask) ? YES : NO; + } + else if (sel_eq(action, @selector(undo:))) + { + NSUndoManager *undo = [self undoManager]; + if (undo == nil) + { + result = NO; + } + else + { + if ([undo canUndo]) + { + [anItem setTitle: [undo undoMenuItemTitle]]; + result = YES; + } + else + { + [anItem setTitle: [undo undoMenuTitleForUndoActionName: @""]]; + result = NO; + } + } + } + else if (sel_eq(action, @selector(redo:))) + { + NSUndoManager *undo = [self undoManager]; + if (undo == nil) + { + result = NO; + } + else + { + if ([undo canRedo]) + { + [anItem setTitle: [undo redoMenuItemTitle]]; + result = YES; + } + else + { + [anItem setTitle: [undo redoMenuTitleForUndoActionName: @""]]; + result = NO; + } + } + } + + return result; +} + /* * Assigning a delegate */