From 0e26f2754010dc44d09985ac2cb2bee3f5bf7b6d Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 24 Sep 2008 23:07:37 -0700 Subject: [PATCH] Fix for not being able to add/remove items from main menubar. [#72 state:resolved] Reviewed by rossco. --- AppKit/CPMenu.j | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/AppKit/CPMenu.j b/AppKit/CPMenu.j index 21abf40dd..36115acf2 100644 --- a/AppKit/CPMenu.j +++ b/AppKit/CPMenu.j @@ -248,7 +248,7 @@ var _CPMenuBarVisible = NO, [_items removeObjectAtIndex:anIndex]; [[CPNotificationCenter defaultCenter] - postNotificationName:CPMenuDidAddItemNotification + postNotificationName:CPMenuDidRemoveItemNotification object:self userInfo:[CPDictionary dictionaryWithObject:anIndex forKey:@"CPMenuItemIndex"]]; } @@ -1305,6 +1305,7 @@ var _CPMenuBarWindowBackgroundColor = nil, { CPMenu _menu; CPView _highlightView; + CPArray _menuItemViews; CPMenuItem _trackingMenuItem; @@ -1447,6 +1448,8 @@ var _CPMenuBarWindowBackgroundColor = nil, object:_menu]; } + _menuItemViews = []; + var contentView = [self contentView], items = [_menu itemArray], count = items.length; @@ -1455,6 +1458,8 @@ var _CPMenuBarWindowBackgroundColor = nil, { var item = items[index], menuItemView = [item _menuItemView]; + + _menuItemViews.push(menuItemView); [menuItemView setShowsStateColumn:NO]; [menuItemView setBelongsToMenuBar:YES]; @@ -1480,6 +1485,38 @@ var _CPMenuBarWindowBackgroundColor = nil, [self tile]; } +- (void)menuDidAddItem:(CPNotification)aNotification +{ + var index = [[aNotification userInfo] objectForKey:@"CPMenuItemIndex"], + menuItem = [_menu itemAtIndex:index], + menuItemView = [menuItem _menuItemView]; + + [_menuItemViews insertObject:menuItemView atIndex:index]; + + [menuItemView setShowsStateColumn:NO]; + [menuItemView setBelongsToMenuBar:YES]; + [menuItemView setFont:_CPMenuBarWindowFont]; + [menuItemView setHidden:[menuItem isHidden]]; + + [menuItemView synchronizeWithMenuItem]; + + [[self contentView] addSubview:menuItemView]; + + [self tile]; +} + +- (void)menuDidRemoveItem:(CPNotification)aNotification +{ + var index = [[aNotification userInfo] objectForKey:@"CPMenuItemIndex"], + menuItemView = [_menuItemViews objectAtIndex:index]; + + [_menuItemViews removeObjectAtIndex:index]; + + [menuItemView removeFromSuperview]; + + [self tile]; +} + - (CGRect)frameForMenuItem:(CPMenuItem)aMenuItem { var frame = [[aMenuItem _menuItemView] frame];