summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorDmitry Zaporozhan <dzaporozhan@productengine.com>2009-12-14 19:14:16 +0200
committerDmitry Zaporozhan <dzaporozhan@productengine.com>2009-12-14 19:14:16 +0200
commitd06742958c3f28cd62e5752aadc107ff98718512 (patch)
treee714bf11f3223ce25ee059e96b3f1027ffcd6788 /indra
parent6f7b7ef32bb6258ccaf5d5df60a5ede2101ae5de (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.cpp6
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp8
-rw-r--r--indra/newview/llpanelpeoplemenus.h2
-rw-r--r--indra/newview/llparticipantlist.cpp8
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;
}