diff options
| author | Rye Mutt <rye@alchemyviewer.org> | 2022-10-19 16:22:24 -0400 | 
|---|---|---|
| committer | Rye Mutt <rye@alchemyviewer.org> | 2022-10-19 16:22:24 -0400 | 
| commit | a48374e8cfbdf261b4902024fb66e60432602b12 (patch) | |
| tree | fd40c5aeda9331fb576dd57e0c3fff0e33dd17c2 /indra/newview | |
| parent | b9552e596fdeaf577d1de1e6d4d2ba5d46bceeb9 (diff) | |
Defer chat history menu creation to right click time to reduce heavy menu bloat and fix chat history menu hoarding
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llchathistory.cpp | 84 | 
1 files changed, 53 insertions, 31 deletions
| diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 7ff24f64ac..f4e1943ea2 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -141,6 +141,18 @@ public:  		{  			mAvatarNameCacheConnection.disconnect();  		} +		auto menu = mPopupMenuHandleAvatar.get(); +		if (menu) +		{ +			menu->die(); +			mPopupMenuHandleAvatar.markDead(); +		} +		menu = mPopupMenuHandleObject.get(); +		if (menu) +		{ +			menu->die(); +			mPopupMenuHandleObject.markDead(); +		}  	}  	BOOL handleMouseUp(S32 x, S32 y, MASK mask) @@ -567,36 +579,6 @@ public:  	BOOL postBuild()  	{ -		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; -		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar registrar_enable; - -		registrar.add("AvatarIcon.Action", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemClicked, this, _2)); -		registrar_enable.add("AvatarIcon.Check", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemChecked, this, _2)); -		registrar_enable.add("AvatarIcon.Enable", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemEnabled, this, _2)); -		registrar_enable.add("AvatarIcon.Visible", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemVisible, this, _2)); -		registrar.add("ObjectIcon.Action", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemClicked, this, _2)); -		registrar_enable.add("ObjectIcon.Visible", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemVisible, this, _2)); - -		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); -		if (menu) -		{ -			mPopupMenuHandleAvatar = menu->getHandle(); -		} -		else -		{ -			LL_WARNS() << " Failed to create menu_avatar_icon.xml" << LL_ENDL; -		} - -		menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); -		if (menu) -		{ -			mPopupMenuHandleObject = menu->getHandle(); -		} -		else -		{ -			LL_WARNS() << " Failed to create menu_object_icon.xml" << LL_ENDL; -		} -  		setDoubleClickCallback(boost::bind(&LLChatHistoryHeader::showInspector, this));  		setMouseEnterCallback(boost::bind(&LLChatHistoryHeader::showInfoCtrl, this)); @@ -883,13 +865,53 @@ protected:  	void showObjectContextMenu(S32 x,S32 y)  	{  		LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandleObject.get(); -		if(menu) +		if (!menu) +		{ +			LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; +			LLUICtrl::EnableCallbackRegistry::ScopedRegistrar registrar_enable; +			registrar.add("ObjectIcon.Action", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemClicked, this, _2)); +			registrar_enable.add("ObjectIcon.Visible", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemVisible, this, _2)); + +			menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +			if (menu) +			{ +				mPopupMenuHandleObject = menu->getHandle(); +				menu->updateParent(LLMenuGL::sMenuContainer); +				LLMenuGL::showPopup(this, menu, x, y); +			} +			else +			{ +				LL_WARNS() << " Failed to create menu_object_icon.xml" << LL_ENDL; +			} +		} +		else +		{  			LLMenuGL::showPopup(this, menu, x, y); +		}  	}  	void showAvatarContextMenu(S32 x,S32 y)  	{  		LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandleAvatar.get(); +		if (!menu) +		{ +			LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; +			LLUICtrl::EnableCallbackRegistry::ScopedRegistrar registrar_enable; +			registrar.add("AvatarIcon.Action", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemClicked, this, _2)); +			registrar_enable.add("AvatarIcon.Check", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemChecked, this, _2)); +			registrar_enable.add("AvatarIcon.Enable", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemEnabled, this, _2)); +			registrar_enable.add("AvatarIcon.Visible", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemVisible, this, _2)); + +			menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +			if (menu) +			{ +				mPopupMenuHandleAvatar = menu->getHandle(); +			} +			else +			{ +				LL_WARNS() << " Failed to create menu_avatar_icon.xml" << LL_ENDL; +			} +		}  		if(menu)  		{ | 
