diff --git a/mozilla/widget/src/cocoa/nsMenuBarX.h b/mozilla/widget/src/cocoa/nsMenuBarX.h index 30bba7c7568..b86ba6a2376 100644 --- a/mozilla/widget/src/cocoa/nsMenuBarX.h +++ b/mozilla/widget/src/cocoa/nsMenuBarX.h @@ -58,6 +58,8 @@ class nsIDOMNode; extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); +PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); + namespace MenuHelpersX { nsEventStatus DispatchCommandTo(nsIWeakReference* aDocShellWeakRef, diff --git a/mozilla/widget/src/cocoa/nsMenuBarX.mm b/mozilla/widget/src/cocoa/nsMenuBarX.mm index e4d7ec8d93a..4fc4678cfa7 100644 --- a/mozilla/widget/src/cocoa/nsMenuBarX.mm +++ b/mozilla/widget/src/cocoa/nsMenuBarX.mm @@ -87,6 +87,15 @@ enum { }; +PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent) +{ + return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, + nsWidgetAtoms::_true, eCaseMatters) || + inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, + nsWidgetAtoms::_true, eCaseMatters)); +} + + nsMenuBarX::nsMenuBarX() : mParent(nsnull), mIsMenuBarAdded(PR_FALSE), mCurrentCommandID(eCommand_ID_Last), mDocument(nsnull) { @@ -502,9 +511,8 @@ NS_IMETHODIMP nsMenuBarX::AddMenu(nsIMenu * aMenu) nsCOMPtr menu; aMenu->GetMenuContent(getter_AddRefs(menu)); - if (!menu->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - menu->GetChildCount() > 0) { + if (menu->GetChildCount() > 0 && + !NodeIsHiddenOrCollapsed(menu)) { NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:@"SomeMenuItem" action:NULL keyEquivalent:@""] autorelease]; [mRootMenu addItem:newMenuItem]; [newMenuItem setSubmenu:menuRef]; diff --git a/mozilla/widget/src/cocoa/nsMenuX.h b/mozilla/widget/src/cocoa/nsMenuX.h index b164a3f4f57..0ee1937c09b 100644 --- a/mozilla/widget/src/cocoa/nsMenuX.h +++ b/mozilla/widget/src/cocoa/nsMenuX.h @@ -135,9 +135,9 @@ protected: PRBool OnDestroyed(); PRBool OnCreated(); - void LoadMenuItem(nsIMenu* pParentMenu, nsIContent* menuitemContent); - void LoadSubMenu(nsIMenu * pParentMenu, nsIContent* menuitemContent); - void LoadSeparator(nsIContent* menuitemContent); + void LoadMenuItem(nsIMenu* pParentMenu, nsIContent* inMenuItemContent); + void LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuContent); + void LoadSeparator(nsIContent* inSeparatorContent); NSMenu* CreateMenuWithGeckoString(nsString& menuTitle); diff --git a/mozilla/widget/src/cocoa/nsMenuX.mm b/mozilla/widget/src/cocoa/nsMenuX.mm index 3e3fe95f3f4..cc063eb71c1 100644 --- a/mozilla/widget/src/cocoa/nsMenuX.mm +++ b/mozilla/widget/src/cocoa/nsMenuX.mm @@ -153,10 +153,7 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString // SetLabel will create the native menu if it has not been created yet SetLabel(aLabel); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) + if (NodeIsHiddenOrCollapsed(mMenuContent)) mVisible = PR_FALSE; if (menubar && mMenuContent->GetChildCount() == 0) @@ -614,9 +611,7 @@ void nsMenuX::LoadMenuItem(nsIMenu* inParentMenu, nsIContent* inMenuItemContent) if (!inMenuItemContent) return; - // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + if (NodeIsHiddenOrCollapsed(inMenuItemContent)) return; // create nsMenuItem @@ -687,15 +682,13 @@ void nsMenuX::LoadMenuItem(nsIMenu* inParentMenu, nsIContent* inMenuItemContent) } -void nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuItemContent) +void nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuContent) { - // if menu should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + if (NodeIsHiddenOrCollapsed(inMenuContent)) return; nsAutoString menuName; - inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); + inMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); //printf("Creating Menu [%s] \n", NS_LossyConvertUTF16toASCII(menuName).get()); // Create nsMenu @@ -706,11 +699,11 @@ void nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuItemContent) if (!docShell) return; nsCOMPtr supports(do_QueryInterface(pParentMenu)); - pnsMenu->Create(supports, menuName, EmptyString(), mManager, docShell, inMenuItemContent); + pnsMenu->Create(supports, menuName, EmptyString(), mManager, docShell, inMenuContent); // set if it's enabled or disabled - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)) + if (inMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)) pnsMenu->SetEnabled(PR_FALSE); else pnsMenu->SetEnabled(PR_TRUE); @@ -722,11 +715,9 @@ void nsMenuX::LoadSubMenu(nsIMenu * pParentMenu, nsIContent* inMenuItemContent) } -void nsMenuX::LoadSeparator(nsIContent* inMenuItemContent) +void nsMenuX::LoadSeparator(nsIContent* inSeparatorContent) { - // if item should be hidden, bail - if (inMenuItemContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters)) + if (NodeIsHiddenOrCollapsed(inSeparatorContent)) return; AddSeparator(); @@ -968,30 +959,22 @@ nsresult nsMenuX::CountVisibleBefore(PRUint32* outVisibleBefore) for (PRUint32 i = 0; i < numMenus; i++) { nsCOMPtr currMenu; menubarParent->GetMenuAt(i, *getter_AddRefs(currMenu)); - - // we found ourselves, break out if (currMenu == NS_STATIC_CAST(nsIMenu*, this)) { + // we found ourselves, break out gotThisMenu = PR_TRUE; break; } - // check the current menu to see if it is visible (not hidden, not collapsed). If - // it is, count it. if (currMenu) { nsCOMPtr menuContent; currMenu->GetMenuContent(getter_AddRefs(menuContent)); - if (menuContent) { - if (menuContent->GetChildCount() > 0 || - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) && - !menuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) { - ++(*outVisibleBefore); - } + if (menuContent && + menuContent->GetChildCount() > 0 && + !NodeIsHiddenOrCollapsed(menuContent)) { + ++(*outVisibleBefore); } } - - } // for each menu + } return gotThisMenu ? NS_OK : NS_ERROR_FAILURE; } // CountVisibleBefore @@ -1061,10 +1044,7 @@ NS_IMETHODIMP nsMenuX::AttributeChanged(nsIDocument *aDocument, PRInt32 aNameSpa else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - if (mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)) { + if (NodeIsHiddenOrCollapsed(mMenuContent)) { if (mVisible) { if (menubarParent) { PRUint32 indexToRemove = 0;