summaryrefslogtreecommitdiff
path: root/indra/newview/llchicletbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llchicletbar.cpp')
-rw-r--r--indra/newview/llchicletbar.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index f1bc51fbe7..c66ae1cdd0 100644
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -34,7 +34,7 @@
// newview includes
#include "llchiclet.h"
-#include "llimfloater.h" // for LLIMFloater
+#include "llfloaterimsession.h" // for LLFloaterIMSession
#include "llpaneltopinfobar.h"
#include "llsyswellwindow.h"
@@ -57,19 +57,11 @@ LLChicletBar::LLChicletBar(const LLSD&)
: mChicletPanel(NULL),
mToolbarStack(NULL)
{
- // Firstly add our self to IMSession observers, so we catch session events
- // before chiclets do that.
- LLIMMgr::getInstance()->addSessionObserver(this);
-
buildFromFile("panel_chiclet_bar.xml");
}
LLChicletBar::~LLChicletBar()
{
- if (!LLSingleton<LLIMMgr>::destroyed())
- {
- LLIMMgr::getInstance()->removeSessionObserver(this);
- }
}
LLIMChiclet* LLChicletBar::createIMChiclet(const LLUUID& session_id)
@@ -92,7 +84,7 @@ LLIMChiclet* LLChicletBar::createIMChiclet(const LLUUID& session_id)
}
//virtual
-void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id)
+void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg)
{
if (!getChicletPanel()) return;
@@ -102,6 +94,13 @@ void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& nam
// no need to spawn chiclets for participants in P2P calls called through Avaline
if (session->isP2P() && session->isOtherParticipantAvaline()) return;
+ // Do not spawn chiclet when using the new multitab conversation UI
+ if (LLFloaterIMSessionTab::isChatMultiTab())
+ {
+ LLFloaterIMSessionTab::addToHost(session_id);
+ return;
+ }
+
if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return;
LLIMChiclet* chiclet = createIMChiclet(session_id);
@@ -109,8 +108,8 @@ void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& nam
{
chiclet->setIMSessionName(name);
chiclet->setOtherParticipantId(other_participant_id);
-
- LLIMFloater::onIMChicletCreated(session_id);
+
+ LLFloaterIMSession::onIMChicletCreated(session_id);
}
else
@@ -125,10 +124,12 @@ void LLChicletBar::sessionRemoved(const LLUUID& session_id)
if(getChicletPanel())
{
// IM floater should be closed when session removed and associated chiclet closed
- LLIMFloater* iMfloater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
- if (iMfloater != NULL)
+ LLFloaterIMSession* im_floater = LLFloaterReg::findTypedInstance<LLFloaterIMSession>("impanel", session_id);
+ if (im_floater != NULL && !im_floater->getStartConferenceInSameFloater())
{
- iMfloater->closeFloater();
+ // Close the IM floater only if we are not planning to close the P2P chat
+ // and start a new conference in the same floater.
+ im_floater->closeFloater();
}
getChicletPanel()->removeChiclet(session_id);