diff options
author | Dmitry Zaporozhan <dzaporozhan@productengine.com> | 2009-12-14 19:14:16 +0200 |
---|---|---|
committer | Dmitry Zaporozhan <dzaporozhan@productengine.com> | 2009-12-14 19:14:16 +0200 |
commit | d06742958c3f28cd62e5752aadc107ff98718512 (patch) | |
tree | e714bf11f3223ce25ee059e96b3f1027ffcd6788 /indra | |
parent | 6f7b7ef32bb6258ccaf5d5df60a5ede2101ae5de (diff) |
Update for critical bug EXT-3427 - Viewer chashes if select Moderator Options submenu in Voice controls quickly.
Added code to hide menu before destroying it.
Added aditional checks.
Added comments
--HG--
branch : product-engine
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llcallfloater.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llpanelpeoplemenus.cpp | 8 | ||||
-rw-r--r-- | indra/newview/llpanelpeoplemenus.h | 2 | ||||
-rw-r--r-- | indra/newview/llparticipantlist.cpp | 8 |
4 files changed, 23 insertions, 1 deletions
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 4f1164788d..2f5523e04d 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -280,7 +280,11 @@ void LLCallFloater::refreshPartisipantList() void LLCallFloater::onCurrentChannelChanged(const LLUUID& /*session_id*/) { - if(LLVoiceChannel::STATE_NO_CHANNEL_INFO == LLVoiceChannel::getCurrentVoiceChannel()->getState()) + // Don't update participant list if no channel info is available. + // Fix for ticket EXT-3427 + // @see LLParticipantList::~LLParticipantList() + if(LLVoiceChannel::getCurrentVoiceChannel() && + LLVoiceChannel::STATE_NO_CHANNEL_INFO == LLVoiceChannel::getCurrentVoiceChannel()->getState()) { return; } diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 04fe42de9f..573de1e51c 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -81,6 +81,14 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, LLMenuGL::showPopup(spawning_view, mMenu, x, y); } +void ContextMenu::hide() +{ + if(mMenu) + { + mMenu->hide(); + } +} + //== NearbyMenu =============================================================== LLContextMenu* NearbyMenu::createMenu() diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index ed0f8208f6..14ae2985f0 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -54,6 +54,8 @@ public: */ /*virtual*/ void show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y); + virtual void hide(); + protected: virtual LLContextMenu* createMenu() = 0; diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 47b9f29b48..2c5f1b094e 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -144,6 +144,14 @@ LLParticipantList::~LLParticipantList() mAvatarListRefreshConnection.disconnect(); mAvatarListReturnConnection.disconnect(); + // It is possible Participant List will be re-created from LLCallFloater::onCurrentChannelChanged() + // See ticket EXT-3427 + // hide menu before deleting it to stop enable and check handlers from triggering. + if(mParticipantListMenu) + { + mParticipantListMenu->hide(); + } + delete mParticipantListMenu; mParticipantListMenu = NULL; } |