> On Oct 20, 2013, at 4:21 AM, Martin Hewitson <martin.hewit...@aei.mpg.de> > wrote: > > >> On 20 Oct 2013, at 01:15 am, Kyle Sluder <k...@ksluder.com> wrote: >> >> Rather than rely on intercepting responder chain-based validation, wouldn't >> it be much easier and more reliable to make some object the delegate of all >> of your NSMenus and implement -menuNeedsUpdate:? > > But wouldn’t this object then need to know details about the different > windows which are presented in the app in order to decide which shortcut key > to set?
No. That's what protocols are for, either formal or informal. @implementation MyAppDelegate @synthesize _closeMenuItem, _closeAllMenuItem; - (void)menuNeedsUpdate:(NSMenu *)menu { // First, set the default shortcuts in case the main window is unwilling or unable _closeMenuItem.keyEquivalent = @"w"; _closeAllMenuItem.keyEquivalent = @""; // Let the main window muck with the key equivalents if appropriate id mainWindowDelegate = [[NSApp mainWindow] delegate]; if ([delegate respondsToSelector:@selector(updateCloseMenuItem:closeAllMenuItem:)]) [delegate updateCloseMenuItem:_closeMenuItem closeAllMenuItem:_closeAllMenuItem]; } If you want to be super-fancy, you could take a hint from NSFontManager and send an “update menus” message down the responder chain, but I prefer the simplicity of this approach. --Kyle Sluder _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com