summaryrefslogtreecommitdiff
path: root/indra/newview/llimfloater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llimfloater.cpp')
-rw-r--r--indra/newview/llimfloater.cpp86
1 files changed, 44 insertions, 42 deletions
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index aee34eb0af..b05568f353 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -361,7 +361,35 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
{
if (!gIMMgr->hasSession(session_id)) return NULL;
- if(!isChatMultiTab())
+ // we should make sure all related chiclets are in place when the session is a voice call
+ // chiclets come firts, then comes IM window
+ if (gIMMgr->isVoiceCall(session_id))
+ {
+ LLIMModel* im_model = LLIMModel::getInstance();
+ LLBottomTray* b_tray = LLBottomTray::getInstance();
+
+ //*TODO hide that into Bottom tray
+ if (!b_tray->getChicletPanel()->findChiclet<LLChiclet>(session_id))
+ {
+ LLIMChiclet* chiclet = b_tray->createIMChiclet(session_id);
+ if(chiclet)
+ {
+ chiclet->setIMSessionName(im_model->getName(session_id));
+ chiclet->setOtherParticipantId(im_model->getOtherParticipantID(session_id));
+ }
+ }
+
+ LLIMWellWindow::getInstance()->addIMRow(session_id);
+ }
+
+ bool not_existed = true;
+
+ if(isChatMultiTab())
+ {
+ LLIMFloater* target_floater = findInstance(session_id);
+ not_existed = NULL == target_floater;
+ }
+ else
{
//hide all
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
@@ -376,33 +404,19 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
}
}
- bool exist = findInstance(session_id);
-
- LLIMFloater* floater = getInstance(session_id);
- if (!floater) return NULL;
+ LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);
if(isChatMultiTab())
{
- LLIMFloaterContainer* floater_container = LLIMFloaterContainer::getInstance();
-
// do not add existed floaters to avoid adding torn off instances
- if (!exist)
+ if (not_existed)
{
// LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
// TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists
LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END;
-
- if (floater_container)
- {
- floater_container->addFloater(floater, TRUE, i_pt);
- }
- }
- if (floater_container)
- {
- //selecting the panel resets a chiclet's counter
- floater_container->selectFloater(floater);
- floater_container->setVisible(TRUE);
+ LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_container");
+ floater_container->addFloater(floater, TRUE, i_pt);
}
}
else
@@ -429,8 +443,8 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
}
// window is positioned, now we can show it.
+ floater->setVisible(true);
}
- floater->setVisible(TRUE);
return floater;
}
@@ -470,6 +484,16 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
}
}
+void LLIMFloater::setTornOff(bool torn_off)
+{
+ // When IM Floater isn't torn off, "close" button should be hidden.
+ // This call will just disables it, since there is a hack in LLFloater::updateButton,
+ // which prevents hiding of close button in that case.
+ setCanClose(torn_off);
+
+ LLTransientDockableFloater::setTornOff(torn_off);
+}
+
void LLIMFloater::setVisible(BOOL visible)
{
LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>
@@ -524,11 +548,6 @@ LLIMFloater* LLIMFloater::findInstance(const LLUUID& session_id)
return LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
}
-LLIMFloater* LLIMFloater::getInstance(const LLUUID& session_id)
-{
- return LLFloaterReg::getTypedInstance<LLIMFloater>("impanel", session_id);
-}
-
void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
{
mSessionInitialized = true;
@@ -1007,20 +1026,3 @@ void LLIMFloater::sRemoveTypingIndicator(const LLSD& data)
floater->removeTypingIndicator();
}
-
-void LLIMFloater::onIMChicletCreated( const LLUUID& session_id )
-{
-
- if (isChatMultiTab())
- {
- LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance();
- if (!im_box) return;
-
- if (LLIMFloater::findInstance(session_id)) return;
-
- LLIMFloater* new_tab = LLIMFloater::getInstance(session_id);
-
- im_box->addFloater(new_tab, FALSE, LLTabContainer::END);
- }
-
-}