diff options
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.cpp | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index a47c9177a1..c39319b373 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 @@ -376,7 +386,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 +480,8 @@ void LLFloaterIMSessionTab::refreshConversation()  			session_name = LLIMModel::instance().getName(mSessionID);  		}  		updateSessionName(session_name); -	}  +	} +	  	mConversationViewModel.requestSortAll();  	mConversationsRoot->arrangeAll();  	mConversationsRoot->update();  | 
