NS_IMETHOD Run() { nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (!pm) return NS_ERROR_UNEXPECTED; // if switching from one menu to another, set a flag so that the call to // HidePopup doesn't deactivate the menubar when the first menu closes. nsMenuBarFrame* menubar = nullptr; if (mOldMenu && mNewMenu) { menubar = do_QueryFrame(mMenuBar->GetPrimaryFrame()); if (menubar) menubar->SetStayActive(true); } if (mOldMenu) { nsWeakFrame weakMenuBar(menubar); pm->HidePopup(mOldMenu, false, false, false); // clear the flag again if (mNewMenu && weakMenuBar.IsAlive()) menubar->SetStayActive(false); } if (mNewMenu) pm->ShowMenu(mNewMenu, mSelectFirstItem, false); return NS_OK; }
NS_IMETHOD Run() { nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (!pm) return NS_ERROR_UNEXPECTED; // if switching from one menu to another, set a flag so that the call to // HidePopup doesn't deactivate the menubar when the first menu closes. nsMenuBarFrame* menubar = nsnull; if (mOldMenu && mNewMenu) { menubar = static_cast<nsMenuBarFrame *> (pm->GetFrameOfTypeForContent(mMenuBar, nsGkAtoms::menuBarFrame, PR_FALSE)); if (menubar) menubar->SetStayActive(PR_TRUE); } if (mOldMenu) { nsWeakFrame weakMenuBar(menubar); pm->HidePopup(mOldMenu, PR_FALSE, PR_FALSE, PR_FALSE); // clear the flag again if (mNewMenu && weakMenuBar.IsAlive()) menubar->SetStayActive(PR_FALSE); } if (mNewMenu) pm->ShowMenu(mNewMenu, mSelectFirstItem, PR_FALSE); return NS_OK; }