diff options
| author | andreykproductengine <akleshchev@productengine.com> | 2016-09-02 19:20:31 +0300 | 
|---|---|---|
| committer | andreykproductengine <akleshchev@productengine.com> | 2016-09-02 19:20:31 +0300 | 
| commit | 9e73d04811f65006198297f527d38f1c6262bdce (patch) | |
| tree | 510214688fba5a2a02b18ac888342020eeda21fd /indra/newview | |
| parent | 9acf7f5733063ff735ad37d456e740211c191cc9 (diff) | |
MAINT-6461 crash due to invalid menu pointer during visibility change
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 39 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.h | 2 | 
2 files changed, 28 insertions, 13 deletions
| diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index c779ba5cdd..eb40616a9c 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -106,7 +106,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)  	  mSavedFolderState(NULL),  	  mFilterText(""),  	  mMenuGearDefault(NULL), -	  mMenuAdd(NULL), +	  mMenuAddHandle(),  	  mNeedUploadCost(true)  {  	// Menu Callbacks (non contex menus) @@ -200,10 +200,15 @@ BOOL LLPanelMainInventory::postBuild()  	// *TODO:Get the cost info from the server  	const std::string upload_cost("10"); -	mMenuAdd->getChild<LLMenuItemGL>("Upload Image")->setLabelArg("[COST]", upload_cost); -	mMenuAdd->getChild<LLMenuItemGL>("Upload Sound")->setLabelArg("[COST]", upload_cost); -	mMenuAdd->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost); -	mMenuAdd->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost); + +	LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); +	if (menu) +	{ +		menu->getChild<LLMenuItemGL>("Upload Image")->setLabelArg("[COST]", upload_cost); +		menu->getChild<LLMenuItemGL>("Upload Sound")->setLabelArg("[COST]", upload_cost); +		menu->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost); +		menu->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost); +	}  	// Trigger callback for focus received so we can deselect items in inbox/outbox  	LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMainInventory::onFocusReceived, this)); @@ -983,7 +988,8 @@ void LLPanelMainInventory::initListCommandsHandlers()  	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));  	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	mGearMenuButton->setMenu(mMenuGearDefault); -	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	mMenuAddHandle = menu->getHandle();  	// Update the trash button when selected item(s) get worn or taken off.  	LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLPanelMainInventory::updateListCommands, this)); @@ -1001,11 +1007,15 @@ void LLPanelMainInventory::onAddButtonClick()  // Gray out the "New Folder" option when the Recent tab is active as new folders will not be displayed  // unless "Always show folders" is checked in the filter options.  	bool recent_active = ("Recent Items" == mActivePanel->getName()); -	mMenuAdd->getChild<LLMenuItemGL>("New Folder")->setEnabled(!recent_active); +	LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); +	if (menu) +	{ +		menu->getChild<LLMenuItemGL>("New Folder")->setEnabled(!recent_active); -	setUploadCostIfNeeded(); +		setUploadCostIfNeeded(); -	showActionMenu(mMenuAdd,"add_btn"); +		showActionMenu(menu,"add_btn"); +	}  }  void LLPanelMainInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name) @@ -1156,7 +1166,11 @@ void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility )  {  	if(!new_visibility)  	{ -		mMenuAdd->setVisible(FALSE); +		LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); +		if (menu) +		{ +			menu->setVisible(FALSE); +		}  		getActivePanel()->getRootFolder()->finishRenamingItem();  	}  } @@ -1289,9 +1303,10 @@ void LLPanelMainInventory::setUploadCostIfNeeded()  	// have two instances of Inventory panel at the moment(and two instances of context menu),  	// call to gMenuHolder->childSetLabelArg() sets upload cost only for one of the instances. -	if(mNeedUploadCost && mMenuAdd) +	LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); +	if(mNeedUploadCost && menu)  	{ -		LLMenuItemBranchGL* upload_menu = mMenuAdd->findChild<LLMenuItemBranchGL>("upload"); +		LLMenuItemBranchGL* upload_menu = menu->findChild<LLMenuItemBranchGL>("upload");  		if(upload_menu)  		{  			S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 290e2e5f47..efa18b42c1 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -156,8 +156,8 @@ protected:  private:  	LLDragAndDropButton*		mTrashButton;  	LLToggleableMenu*			mMenuGearDefault; -	LLMenuGL*					mMenuAdd;  	LLMenuButton*				mGearMenuButton; +	LLHandle<LLView>			mMenuAddHandle;  	bool						mNeedUploadCost;  	// List Commands                                                              // | 
