Search code examples
cocoaundonsundomanager

Disable undo/redo in Cocoa app


I've implemented undo/redo the standard way (NSUndoManager) but can't figure out how I disable undo/redos when my app is in a specific state.

Users draw things in my app and when what they've drawn is uploading I disable the UI and of course don't want the user to be able to undo/redo.

I use a NSView's Undo Manager so I guess one way could be to just make that view resign first responder. Is there another way?


Solution

  • You can finalize undo and redo with

     - (void) removeAllActions;
    

    or remove actions for a specific target with

     - (void) removeAllActionsWithTarget: (id) target;
    

    If you simply want to disable any actions for a time, leaving the undo stack unchanged, simply disable the Undo/Redo menu items using NSMenuValidationProtocol's

     - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;