summaryrefslogtreecommitdiff
path: root/indra/newview/llimfloatercontainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llimfloatercontainer.cpp')
-rw-r--r--indra/newview/llimfloatercontainer.cpp51
1 files changed, 49 insertions, 2 deletions
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index a2a54bf02c..33b96b20f3 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -103,14 +103,14 @@ BOOL LLIMFloaterContainer::postBuild()
void LLIMFloaterContainer::onOpen(const LLSD& key)
{
- LLMultiFloater::onOpen(key);
if (getFloaterCount() == 0)
{
- // If there's *no* conversation open so far, we force the opening of the nearby chat conversation
+ // We always force the opening of the nearby chat conversation when we open for the first time
// *TODO: find a way to move this to XML as a default panel or something like that
LLSD name("chat_bar");
LLFloaterReg::toggleInstanceOrBringToFront(name);
}
+ LLMultiFloater::onOpen(key);
/*
if (key.isDefined())
{
@@ -284,6 +284,44 @@ void LLIMFloaterContainer::setMinimized(BOOL b)
}
}
+void LLIMFloaterContainer::draw()
+{
+ if (mTabContainer->getTabCount() == 0)
+ {
+ // Do not close the container when every conversation is torn off because the user
+ // still needs the conversation list. Simply collapse the message pane in that case.
+ collapseMessagesPane(true);
+ }
+ LLFloater::draw();
+}
+
+void LLIMFloaterContainer::tabClose()
+{
+ if (mTabContainer->getTabCount() == 0)
+ {
+ // Do not close the container when every conversation is torn off because the user
+ // still needs the conversation list. Simply collapse the message pane in that case.
+ collapseMessagesPane(true);
+ }
+}
+
+void LLIMFloaterContainer::setVisible(BOOL visible)
+{
+ // We need to show/hide all the associated conversations that have been torn off
+ // (and therefore, are not longer managed by the multifloater),
+ // so that they show/hide with the conversations manager.
+ conversations_items_map::iterator item_it = mConversationsItems.begin();
+ for (;item_it != mConversationsItems.end(); ++item_it)
+ {
+ LLConversationItem* item = item_it->second;
+ item->setVisibleIfDetached(visible);
+ }
+
+ // Now, do the normal multifloater show/hide
+ LLMultiFloater::setVisible(visible);
+
+}
+
void LLIMFloaterContainer::collapseMessagesPane(bool collapse)
{
if (mMessagesPane->isCollapsed() == collapse)
@@ -485,6 +523,15 @@ void LLConversationItem::selectItem(void)
mFloater->setFocus(TRUE);
}
+void LLConversationItem::setVisibleIfDetached(BOOL visible)
+{
+ // Do this only if the conversation floater has been torn off (i.e. no multi floater host)
+ if (!mFloater->getHost())
+ {
+ mFloater->setVisible(visible);
+ }
+}
+
void LLConversationItem::performAction(LLInventoryModel* model, std::string action)
{
}