diff options
-rw-r--r-- | indra/newview/llcallfloater.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llcallfloater.h | 8 | ||||
-rw-r--r-- | indra/newview/llspeakbutton.cpp | 3 |
3 files changed, 26 insertions, 9 deletions
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 1f23840109..f60f1e59d7 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -42,6 +42,8 @@ #include "llagentdata.h" // for gAgentID #include "llavatarlist.h" #include "llbottomtray.h" +#include "llimfloater.h" +#include "llfloaterreg.h" #include "llparticipantlist.h" #include "llspeakers.h" #include "lltransientfloatermgr.h" @@ -95,7 +97,6 @@ LLCallFloater::LLCallFloater(const LLSD& key) LLCallFloater::~LLCallFloater() { - mChannelChangedConnection.disconnect(); delete mPaticipants; mPaticipants = NULL; @@ -128,8 +129,6 @@ BOOL LLCallFloater::postBuild() // update list for current session updateSession(); - // subscribe to to be notified Voice Channel is changed - mChannelChangedConnection = LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLCallFloater::onCurrentChannelChanged, this, _1)); return TRUE; } @@ -245,6 +244,17 @@ void LLCallFloater::updateSession() refreshPartisipantList(); updateModeratorState(); + + //show floater for voice calls + if (!is_local_chat) + { + LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); + bool show_me = !(im_floater && im_floater->getVisible()); + if (show_me) + { + setVisible(true); + } + } } void LLCallFloater::refreshPartisipantList() @@ -281,7 +291,7 @@ void LLCallFloater::refreshPartisipantList() } } -void LLCallFloater::onCurrentChannelChanged(const LLUUID& /*session_id*/) +void LLCallFloater::sOnCurrentChannelChanged(const LLUUID& /*session_id*/) { // Don't update participant list if no channel info is available. // Fix for ticket EXT-3427 @@ -291,9 +301,11 @@ void LLCallFloater::onCurrentChannelChanged(const LLUUID& /*session_id*/) { return; } + LLCallFloater* call_floater = LLFloaterReg::getTypedInstance<LLCallFloater>("voice_controls"); + // Forget speaker manager from the previous session to avoid using it after session was destroyed. - mSpeakerManager = NULL; - updateSession(); + call_floater->mSpeakerManager = NULL; + call_floater->updateSession(); } void LLCallFloater::updateTitle() diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index b2288a42ff..f9c9149085 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -70,6 +70,8 @@ public: */ /*virtual*/ void onChange(); + static void sOnCurrentChannelChanged(const LLUUID& session_id); + private: typedef enum e_voice_controls_type { @@ -93,7 +95,9 @@ private: * Refreshes participant list according to current Voice Channel */ void refreshPartisipantList(); - void onCurrentChannelChanged(const LLUUID& session_id); + + + void updateTitle(); void initAgentData(); void setModeratorMutedVoice(bool moderator_muted); @@ -108,8 +112,6 @@ private: LLPanel* mAgentPanel; LLOutputMonitorCtrl* mSpeakingIndicator; bool mIsModeratorMutedVoice; - - boost::signals2::connection mChannelChangedConnection; }; diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index 5edc4804ca..fd39bde118 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -119,6 +119,9 @@ LLSpeakButton::LLSpeakButton(const Params& p) // never show "muted" because you can't mute yourself mOutputMonitor->setIsMuted(false); mOutputMonitor->setIsAgentControl(true); + + //*TODO find a better place to do that + LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLCallFloater::sOnCurrentChannelChanged, _1)); } LLSpeakButton::~LLSpeakButton() |