fixed EXT-3821 [BSI] New IMs are not added as tabs
--HG-- branch : product-enginemeow-7.2.2
parent
c63c9656fc
commit
4f51ab8448
|
|
@ -161,6 +161,9 @@ void LLBottomTray::sessionAdded(const LLUUID& session_id, const std::string& nam
|
|||
{
|
||||
chiclet->setIMSessionName(name);
|
||||
chiclet->setOtherParticipantId(other_participant_id);
|
||||
|
||||
LLIMFloater::onIMChicletCreated(session_id);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -361,35 +361,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
|
|||
{
|
||||
if (!gIMMgr->hasSession(session_id)) return NULL;
|
||||
|
||||
// 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
|
||||
if(!isChatMultiTab())
|
||||
{
|
||||
//hide all
|
||||
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
|
||||
|
|
@ -404,19 +376,33 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
|
|||
}
|
||||
}
|
||||
|
||||
LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);
|
||||
bool exist = findInstance(session_id);
|
||||
|
||||
LLIMFloater* floater = getInstance(session_id);
|
||||
if (!floater) return NULL;
|
||||
|
||||
if(isChatMultiTab())
|
||||
{
|
||||
LLIMFloaterContainer* floater_container = LLIMFloaterContainer::getInstance();
|
||||
|
||||
// do not add existed floaters to avoid adding torn off instances
|
||||
if (not_existed)
|
||||
if (!exist)
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_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);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -443,8 +429,8 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
|
|||
}
|
||||
|
||||
// window is positioned, now we can show it.
|
||||
floater->setVisible(true);
|
||||
}
|
||||
floater->setVisible(TRUE);
|
||||
|
||||
return floater;
|
||||
}
|
||||
|
|
@ -538,6 +524,11 @@ 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;
|
||||
|
|
@ -1016,3 +1007,20 @@ 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -74,6 +74,8 @@ public:
|
|||
|
||||
static LLIMFloater* findInstance(const LLUUID& session_id);
|
||||
|
||||
static LLIMFloater* getInstance(const LLUUID& session_id);
|
||||
|
||||
void sessionInitReplyReceived(const LLUUID& im_session_id);
|
||||
|
||||
// get new messages from LLIMModel
|
||||
|
|
@ -112,6 +114,8 @@ public:
|
|||
//used as a callback on receiving new IM message
|
||||
static void sRemoveTypingIndicator(const LLSD& data);
|
||||
|
||||
static void onIMChicletCreated(const LLUUID& session_id);
|
||||
|
||||
private:
|
||||
// process focus events to set a currently active session
|
||||
/* virtual */ void onFocusLost();
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llimfloatercontainer.h"
|
||||
#include "llfloaterreg.h"
|
||||
|
||||
//
|
||||
// LLIMFloaterContainer
|
||||
|
|
@ -93,4 +94,14 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
|
|||
}
|
||||
}
|
||||
|
||||
LLIMFloaterContainer* LLIMFloaterContainer::findInstance()
|
||||
{
|
||||
return LLFloaterReg::findTypedInstance<LLIMFloaterContainer>("im_container");
|
||||
}
|
||||
|
||||
LLIMFloaterContainer* LLIMFloaterContainer::getInstance()
|
||||
{
|
||||
return LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container");
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -52,7 +52,11 @@ public:
|
|||
LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END);
|
||||
|
||||
static LLFloater* getCurrentVoiceFloater();
|
||||
|
||||
|
||||
static LLIMFloaterContainer* findInstance();
|
||||
|
||||
static LLIMFloaterContainer* getInstance();
|
||||
|
||||
protected:
|
||||
|
||||
LLFloater* mActiveVoiceFloater;
|
||||
|
|
|
|||
Loading…
Reference in New Issue