diff --git a/indra/newview/fsfloatervoicecontrols.cpp b/indra/newview/fsfloatervoicecontrols.cpp
index f761e7090c..bf882363c5 100644
--- a/indra/newview/fsfloatervoicecontrols.cpp
+++ b/indra/newview/fsfloatervoicecontrols.cpp
@@ -101,7 +101,7 @@ static void* create_non_avatar_caller(void*)
LLVoiceChannel* FSFloaterVoiceControls::sCurrentVoiceChannel = NULL;
FSFloaterVoiceControls::FSFloaterVoiceControls(const LLSD& key)
-: LLFloater(key)
+: LLTransientDockableFloater(NULL, false, key)
, mSpeakerManager(NULL)
, mParticipants(NULL)
, mAvatarList(NULL)
@@ -119,6 +119,7 @@ FSFloaterVoiceControls::FSFloaterVoiceControls(const LLSD& key)
mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);
LLVoiceClient::instance().addObserver(this);
+ LLTransientFloaterMgr::getInstance()->addControlView(this);
// update the agent's name if display name setting change
LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&FSFloaterVoiceControls::updateAgentModeratorState, this));
@@ -141,6 +142,7 @@ FSFloaterVoiceControls::~FSFloaterVoiceControls()
{
LLVoiceClient::getInstance()->removeObserver(this);
}
+ LLTransientFloaterMgr::getInstance()->removeControlView(this);
}
// virtual
diff --git a/indra/newview/fsfloatervoicecontrols.h b/indra/newview/fsfloatervoicecontrols.h
index e1d76e98a7..31843b181f 100644
--- a/indra/newview/fsfloatervoicecontrols.h
+++ b/indra/newview/fsfloatervoicecontrols.h
@@ -30,7 +30,7 @@
#ifndef FS_FLOATERVOICECONTROLS_H
#define FS_FLOATERVOICECONTROLS_H
-#include "llfloater.h"
+#include "lltransientdockablefloater.h"
#include "llvoicechannel.h"
#include "llvoiceclient.h"
@@ -55,7 +55,7 @@ class LLSliderCtrl;
* When the Resident is engaged in any chat except Nearby Chat, the Voice Control Panel
* also provides a 'Leave Call' button to allow the Resident to leave that voice channel.
*/
-class FSFloaterVoiceControls : public LLFloater, LLVoiceClientParticipantObserver
+class FSFloaterVoiceControls : public LLTransientDockableFloater, LLVoiceClientParticipantObserver
{
public:
@@ -291,6 +291,9 @@ private:
*/
static LLVoiceChannel* sCurrentVoiceChannel;
+ /* virtual */
+ LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; }
+
boost::signals2::connection mVoiceChannelStateChangeConnection;
};
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index fec145af70..adc08e069d 100755
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -539,14 +539,14 @@ void LLToolBarView::onToolBarButtonAdded(LLView* button)
}
}
}
- // Nearby Voices isn't a TransientDockableFloater and the button doesn't exist in V3 anymore
- //else if (button->getName() == "voice")
- //{
- // // Add the "Voice controls" button as a control view in LLTransientFloaterMgr
- // // to prevent hiding the transient IM floater upon pressing "Voice controls".
- // LLTransientFloaterMgr::getInstance()->addControlView(button);
- //}
- //
+ // Do not remove in case they get removed by LL! We need this for standalone
+ // IM floaters.
+ else if (button->getName() == "voice")
+ {
+ // Add the "Voice controls" button as a control view in LLTransientFloaterMgr
+ // to prevent hiding the transient IM floater upon pressing "Voice controls".
+ LLTransientFloaterMgr::getInstance()->addControlView(button);
+ }
// Dockable QuickPrefs floater
else if (button->getName() == "quickprefs" && !FSCommon::isLegacySkin())
{
@@ -591,12 +591,12 @@ void LLToolBarView::onToolBarButtonRemoved(LLView* button)
dock_control->setDock(NULL);
}
}
- // Nearby Voices isn't a TransientDockableFloater and the button doesn't exist in V3 anymore
- //else if (button->getName() == "voice")
- //{
- // LLTransientFloaterMgr::getInstance()->removeControlView(button);
- //}
- //
+ // Do not remove in case they get removed by LL! We need this for standalone
+ // IM floaters.
+ else if (button->getName() == "voice")
+ {
+ LLTransientFloaterMgr::getInstance()->removeControlView(button);
+ }
// Dockable QuickPrefs floater
else if (button->getName() == "quickprefs" && !FSCommon::isLegacySkin())
{