summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterimsessiontab.cpp
diff options
context:
space:
mode:
authorGilbert Gonzales <gilbert@lindenlab.com>2012-11-12 12:58:28 -0800
committerGilbert Gonzales <gilbert@lindenlab.com>2012-11-12 12:58:28 -0800
commit0e6139eb3d3af1e77df20f87deef427993bf2c61 (patch)
tree2c93f9a8d69f28cec99393b3cacbab85a8aa073d /indra/newview/llfloaterimsessiontab.cpp
parent6f53b5baeb9e04c20c8fe6f419e09c9604a56497 (diff)
parent7833ecb58094641d3cd79c6772ad6c9fd4799f92 (diff)
merging in latest changes
Diffstat (limited to 'indra/newview/llfloaterimsessiontab.cpp')
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index a47c9177a1..3a1cc2880a 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -263,11 +263,21 @@ void LLFloaterIMSessionTab::draw()
{
if (mRefreshTimer->hasExpired())
{
- if (getParticipantList())
+ LLParticipantList* item = getParticipantList();
+ if (item)
{
- getParticipantList()->update();
+ // Update all model items
+ item->update();
+ // If the model and view list diverge in count, rebuild
+ // Note: this happens sometimes right around init (add participant events fire but get dropped) and is the cause
+ // of missing participants, often, the user agent itself. As there will be no other event fired, there's
+ // no other choice but get those inconsistencies regularly (and lightly) checked and scrubbed.
+ if (item->getChildrenCount() != mConversationsWidgets.size())
+ {
+ buildConversationViewParticipant();
+ }
}
-
+
refreshConversation();
// Restart the refresh timer
@@ -303,6 +313,7 @@ void LLFloaterIMSessionTab::onFocusReceived()
if (container)
{
container->selectConversationPair(mSessionID, true);
+ container->showStub(! getHost());
}
}
@@ -376,7 +387,7 @@ void LLFloaterIMSessionTab::buildConversationViewParticipant()
LLParticipantList* item = getParticipantList();
if (!item)
{
- // Nothing to do if the model list is empty
+ // Nothing to do if the model list is inexistent
return;
}
@@ -470,7 +481,8 @@ void LLFloaterIMSessionTab::refreshConversation()
session_name = LLIMModel::instance().getName(mSessionID);
}
updateSessionName(session_name);
- }
+ }
+
mConversationViewModel.requestSortAll();
mConversationsRoot->arrangeAll();
mConversationsRoot->update();