From 26e90701ecc87217529fb37a8391ab54aea0d4d4 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Mon, 30 Jun 2008 23:51:37 +0200 Subject: [PATCH] Add support for a global "Plug-In" menu --- src/MacVim/MMAppController.h | 5 +++++ src/MacVim/MMAppController.m | 53 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/MacVim/MMAppController.h b/src/MacVim/MMAppController.h index fcec67f6..9214cf9e 100644 --- a/src/MacVim/MMAppController.h +++ b/src/MacVim/MMAppController.h @@ -24,6 +24,7 @@ NSMenu *defaultMainMenu; NSMenuItem *appMenuItemTemplate; NSMenuItem *recentFilesMenuItem; + NSMenuItem *plugInMenuItem; } + (MMAppController *)sharedInstance; @@ -32,6 +33,10 @@ - (void)removeVimController:(id)controller; - (void)windowControllerWillOpen:(MMWindowController *)windowController; - (void)setMainMenu:(NSMenu *)mainMenu; + +- (void)addItemToPlugInMenu:(NSMenuItem *)item; +- (void)removeItemFromPlugInMenu:(NSMenuItem *)item; + - (IBAction)newWindow:(id)sender; - (IBAction)fileOpen:(id)sender; - (IBAction)selectNextWindow:(id)sender; diff --git a/src/MacVim/MMAppController.m b/src/MacVim/MMAppController.m index 445532f5..91431f14 100644 --- a/src/MacVim/MMAppController.m +++ b/src/MacVim/MMAppController.m @@ -100,6 +100,8 @@ static int executeInLoginShell(NSString *path, NSArray *args); - (NSMutableDictionary *)extractArgumentsFromOdocEvent: (NSAppleEventDescriptor *)desc; - (void)passArguments:(NSDictionary *)args toVimController:(MMVimController*)vc; +- (void)removePlugInMenu; +- (void)addPlugInMenuToMenu:(NSMenu *)mainMenu; @end @@ -149,6 +151,15 @@ static int executeInLoginShell(NSString *path, NSArray *args); vimControllers = [NSMutableArray new]; pidArguments = [NSMutableDictionary new]; + NSString *plugInTitle = NSLocalizedString(@"Plug-In", + @"Plug-In menu title"); + plugInMenuItem = [[NSMenuItem alloc] initWithTitle:plugInTitle + action:NULL + keyEquivalent:@""]; + NSMenu *submenu = [[NSMenu alloc] initWithTitle:plugInTitle]; + [plugInMenuItem setSubmenu:submenu]; + [submenu release]; + // NOTE: Do not use the default connection since the Logitech Control // Center (LCC) input manager steals and this would cause MacVim to // never open any windows. (This is a bug in LCC but since they are @@ -189,6 +200,7 @@ static int executeInLoginShell(NSString *path, NSArray *args); [openSelectionString release]; openSelectionString = nil; [recentFilesMenuItem release]; recentFilesMenuItem = nil; [defaultMainMenu release]; defaultMainMenu = nil; + [plugInMenuItem release]; plugInMenuItem = nil; [appMenuItemTemplate release]; appMenuItemTemplate = nil; [super dealloc]; @@ -666,6 +678,26 @@ static int executeInLoginShell(NSString *path, NSArray *args); } } [NSApp setWindowsMenu:windowsMenu]; + + // Move plugin menu from old to new main menu. + [self removePlugInMenu]; + [self addPlugInMenuToMenu:mainMenu]; +} + +- (void)addItemToPlugInMenu:(NSMenuItem *)item +{ + NSMenu *menu = [plugInMenuItem submenu]; + [menu addItem:item]; + if ([menu numberOfItems] == 1) + [self addPlugInMenuToMenu:[NSApp mainMenu]]; +} + +- (void)removeItemFromPlugInMenu:(NSMenuItem *)item +{ + NSMenu *menu = [plugInMenuItem submenu]; + [menu removeItem:item]; + if ([menu numberOfItems] == 0) + [self removePlugInMenu]; } - (IBAction)newWindow:(id)sender @@ -1243,6 +1275,27 @@ static int executeInLoginShell(NSString *path, NSArray *args); [vc addVimInput:buildSearchTextCommand(searchText)]; } +- (void)removePlugInMenu +{ + if ([plugInMenuItem menu]) + [[plugInMenuItem menu] removeItem:plugInMenuItem]; +} + +- (void)addPlugInMenuToMenu:(NSMenu *)mainMenu +{ + NSMenu *windowsMenu = [mainMenu findWindowsMenu]; + + if ([[plugInMenuItem submenu] numberOfItems] > 0) { + int idx = windowsMenu ? [mainMenu indexOfItemWithSubmenu:windowsMenu] + : -1; + if (idx > 0) { + [mainMenu insertItem:plugInMenuItem atIndex:idx]; + } else { + [mainMenu addItem:plugInMenuItem]; + } + } +} + @end // MMAppController (Private) -- 2.11.4.GIT