MAINT-4009: Patching a small memory leak for when menu items were being created before the viewer window initialization had created the menu holder. Also, added llasserts in other cases when referencing the menu holder to ensure the holder is non-null.
parent
205503dd84
commit
001621dfc2
|
|
@ -231,6 +231,7 @@ LLFolderView::LLFolderView(const Params& p)
|
|||
|
||||
|
||||
// make the popup menu available
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(p.options_menu, LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
|
||||
if (!menu)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
|
|||
setPrevalidateInput(p.prevalidate_input_callback());
|
||||
setPrevalidate(p.prevalidate_callback());
|
||||
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>
|
||||
("menu_text_editor.xml",
|
||||
LLMenuGL::sMenuContainer,
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ void LLMenuButton::setMenu(const std::string& menu_filename, EMenuPosition posit
|
|||
return;
|
||||
}
|
||||
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLToggleableMenu* menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(menu_filename, LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
|
||||
if (!menu)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1815,6 +1815,7 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
|||
// create the context menu from the XUI file and display it
|
||||
std::string menu_name = is_group ? "menu_url_group.xml" : "menu_url_agent.xml";
|
||||
delete mPopupMenu;
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
|
||||
menu_name, LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
|
||||
if (mPopupMenu)
|
||||
|
|
|
|||
|
|
@ -1955,6 +1955,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
|
|||
|
||||
// create and return the context menu from the XUI file
|
||||
delete mPopupMenu;
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(xui_file, LLMenuGL::sMenuContainer,
|
||||
LLMenuHolderGL::child_registry_t::instance());
|
||||
if (mIsFriendSignal)
|
||||
|
|
|
|||
|
|
@ -2031,6 +2031,7 @@ void LLTextEditor::showContextMenu(S32 x, S32 y)
|
|||
{
|
||||
if (!mContextMenu)
|
||||
{
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mContextMenu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>("menu_text_editor.xml",
|
||||
LLMenuGL::sMenuContainer,
|
||||
LLMenuHolderGL::child_registry_t::instance());
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ void LLToolBar::createContextMenu()
|
|||
enable_reg.add("Toolbars.CheckSetting", boost::bind(&LLToolBar::isSettingChecked, this, _2));
|
||||
|
||||
// Create the context menu
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>("menu_toolbars.xml", LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
|
||||
|
||||
if (menu)
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ void LLNotificationChiclet::createMenu()
|
|||
enable_registrar.add("NotificationWellChicletMenu.EnableItem",
|
||||
boost::bind(&LLNotificationChiclet::enableMenuItem, this, _2));
|
||||
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>
|
||||
("menu_notification_well_button.xml",
|
||||
LLMenuGL::sMenuContainer,
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ void LLListContextMenu::handleMultiple(functor_t functor, const uuid_vec_t& ids)
|
|||
// static
|
||||
LLContextMenu* LLListContextMenu::createFromFile(const std::string& filename)
|
||||
{
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
|
||||
filename, LLContextMenu::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -390,6 +390,8 @@ BOOL LLMediaCtrl::postBuild ()
|
|||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registar;
|
||||
registar.add("Open.WebInspector", boost::bind(&LLMediaCtrl::onOpenWebInspector, this));
|
||||
|
||||
// stinson 05/05/2014 : cannot assert on the menu container being NULL because it will be during the processing of main_view.xml
|
||||
// llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
|
||||
"menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChanged, this, _2));
|
||||
|
|
@ -1117,3 +1119,8 @@ void LLMediaCtrl::setTrustedContent(bool trusted)
|
|||
mMediaSource->setTrustedBrowser(trusted);
|
||||
}
|
||||
}
|
||||
|
||||
void LLMediaCtrl::updateContextMenuParent(LLView* pNewParent)
|
||||
{
|
||||
mContextMenu->updateParent(pNewParent);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -168,6 +168,8 @@ public:
|
|||
|
||||
LLUUID getTextureID() {return mMediaTextureID;}
|
||||
|
||||
void updateContextMenuParent(LLView* pNewParent);
|
||||
|
||||
protected:
|
||||
void convertInputCoords(S32& x, S32& y);
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ public:
|
|||
|
||||
registrar.add("Wearable.Create", boost::bind(onCreate, _2));
|
||||
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLToggleableMenu* menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
|
||||
"menu_cof_gear.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
llassert(menu);
|
||||
|
|
@ -228,6 +229,7 @@ public:
|
|||
enable_registrar.add("AddWearable.Gear.Check", boost::bind(onCheck, flat_list_handle, inventory_panel_handle, _2));
|
||||
enable_registrar.add("AddWearable.Gear.Visible", boost::bind(onVisible, inventory_panel_handle, _2));
|
||||
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
LLToggleableMenu* menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
|
||||
"menu_add_wearable_gear.xml",
|
||||
LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
|
|
|
|||
|
|
@ -341,6 +341,7 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()
|
|||
registrar.add("TeleportHistory.CopyToClipboard",boost::bind(&LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard, this));
|
||||
|
||||
// create the context menu from the XUI
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
|
||||
"menu_teleport_history_item.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
}
|
||||
|
|
@ -935,6 +936,7 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y
|
|||
registrar.add("TeleportHistory.TabClose", boost::bind(&LLTeleportHistoryPanel::onAccordionTabClose, this, tab));
|
||||
|
||||
// create the context menu from the XUI
|
||||
llassert(LLMenuGL::sMenuContainer != NULL);
|
||||
mAccordionTabMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
|
||||
"menu_teleport_history_tab.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
|
||||
|
|
|
|||
|
|
@ -1910,9 +1910,13 @@ void LLViewerWindow::initBase()
|
|||
setProgressCancelButtonVisible(FALSE);
|
||||
|
||||
gMenuHolder = getRootView()->getChild<LLViewerMenuHolderGL>("Menu Holder");
|
||||
|
||||
LLMenuGL::sMenuContainer = gMenuHolder;
|
||||
|
||||
// stinson 05/05/2014 : the panel_progress.xml references a LLMediaCtrl(<web_browser></web_browser>) class
|
||||
// which creates some menu items. However, because the Menu Holder is not initialized then, we need to
|
||||
// update the parent for the menu items so they will be properly cleaned up.
|
||||
LLMediaCtrl* mediaCtrl = getRootView()->findChild<LLMediaCtrl>("login_media_panel");
|
||||
mediaCtrl->updateContextMenuParent(LLMenuGL::sMenuContainer);
|
||||
}
|
||||
|
||||
void LLViewerWindow::initWorldUI()
|
||||
|
|
|
|||
Loading…
Reference in New Issue