summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llconversationmodel.cpp30
-rw-r--r--indra/newview/llfloaterimsession.cpp25
-rw-r--r--indra/newview/llfloaterimsession.h1
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp2
4 files changed, 27 insertions, 31 deletions
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index 0837a49095..ba92022673 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -27,6 +27,7 @@
#include "llviewerprecompiledheaders.h"
+#include "llagent.h"
#include "llavatarnamecache.h"
#include "llavataractions.h"
#include "llevents.h"
@@ -161,8 +162,8 @@ void LLConversationItemSession::addParticipant(LLConversationItemParticipant* pa
void LLConversationItemSession::updateParticipantName(LLConversationItemParticipant* participant)
{
- // We modify the session name only in the case of an ad-hoc session, exit otherwise (nothing to do)
- if (getType() != CONV_SESSION_AD_HOC)
+ // We modify the session name only in the case of an ad-hoc session or P2P session, exit otherwise (nothing to do)
+ if ((getType() != CONV_SESSION_AD_HOC) && (getType() != CONV_SESSION_1_ON_1))
{
return;
}
@@ -171,26 +172,26 @@ void LLConversationItemSession::updateParticipantName(LLConversationItemParticip
{
return;
}
- // Build a string containing the participants names and check if ready for display (we don't want "(waiting)" in there)
- bool all_names_resolved = true;
+ // Build a string containing the participants names (minus own agent) and check if ready for display (we don't want "(waiting)" in there)
+ // Note: we don't bind ourselves to the LLAvatarNameCache event as updateParticipantName() is called by
+ // onAvatarNameCache() which is itself attached to the same event.
uuid_vec_t temp_uuids; // uuids vector for building the added participants' names string
child_list_t::iterator iter = mChildren.begin();
while (iter != mChildren.end())
{
LLConversationItemParticipant* current_participant = dynamic_cast<LLConversationItemParticipant*>(*iter);
- temp_uuids.push_back(current_participant->getUUID());
- LLAvatarName av_name;
- if (!LLAvatarNameCache::get(current_participant->getUUID(), &av_name))
- {
- // If the name is not in the cache yet, bail out
- // Note: we don't bind ourselves to the LLAvatarNameCache event as we are called by
- // onAvatarNameCache() which is itself attached to the same event.
- all_names_resolved = false;
- break;
+ // Add the avatar uuid to the list (except if it's the own agent uuid)
+ if (current_participant->getUUID() != gAgentID)
+ {
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(current_participant->getUUID(), &av_name))
+ {
+ temp_uuids.push_back(current_participant->getUUID());
+ }
}
iter++;
}
- if (all_names_resolved)
+ if (temp_uuids.size() != 0)
{
std::string new_session_name;
LLAvatarActions::buildResidentsString(temp_uuids, new_session_name);
@@ -203,6 +204,7 @@ void LLConversationItemSession::removeParticipant(LLConversationItemParticipant*
{
removeChild(participant);
mNeedsRefresh = true;
+ updateParticipantName(participant);
postEvent("remove_participant", this, participant);
}
diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp
index e1dc5b91d0..212b0df712 100644
--- a/indra/newview/llfloaterimsession.cpp
+++ b/indra/newview/llfloaterimsession.cpp
@@ -66,7 +66,6 @@ LLFloaterIMSession::LLFloaterIMSession(const LLUUID& session_id)
: LLFloaterIMSessionTab(session_id),
mLastMessageIndex(-1),
mDialog(IM_NOTHING_SPECIAL),
- mSavedTitle(),
mTypingStart(),
mShouldSendTypingState(false),
mMeTyping(false),
@@ -504,9 +503,12 @@ void LLFloaterIMSession::onVoiceChannelStateChanged(
void LLFloaterIMSession::updateSessionName(const std::string& name)
{
- LLFloaterIMSessionTab::updateSessionName(name);
- setTitle(name);
- mTypingStart.setArg("[NAME]", name);
+ if (!name.empty())
+ {
+ LLFloaterIMSessionTab::updateSessionName(name);
+ mTypingStart.setArg("[NAME]", name);
+ setTitle (mOtherTyping ? mTypingStart.getString() : name);
+ }
}
//static
@@ -1095,14 +1097,10 @@ BOOL LLFloaterIMSession::inviteToSession(const uuid_vec_t& ids)
void LLFloaterIMSession::addTypingIndicator(const LLIMInfo* im_info)
{
// We may have lost a "stop-typing" packet, don't add it twice
- if ( im_info && !mOtherTyping )
+ if (im_info && !mOtherTyping)
{
mOtherTyping = true;
- // Save and set new title
- mSavedTitle = getTitle();
- setTitle (mTypingStart);
-
// Update speaker
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
if ( speaker_mgr )
@@ -1114,18 +1112,15 @@ void LLFloaterIMSession::addTypingIndicator(const LLIMInfo* im_info)
void LLFloaterIMSession::removeTypingIndicator(const LLIMInfo* im_info)
{
- if ( mOtherTyping )
+ if (mOtherTyping)
{
mOtherTyping = false;
- // Revert the title to saved one
- setTitle(mSavedTitle);
-
- if ( im_info )
+ if (im_info)
{
// Update speaker
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
- if ( speaker_mgr )
+ if (speaker_mgr)
{
speaker_mgr->setSpeakerTyping(im_info->mFromID, FALSE);
}
diff --git a/indra/newview/llfloaterimsession.h b/indra/newview/llfloaterimsession.h
index f4ec2d457d..72a320041f 100644
--- a/indra/newview/llfloaterimsession.h
+++ b/indra/newview/llfloaterimsession.h
@@ -174,7 +174,6 @@ private:
LLUUID mOtherParticipantUUID;
bool mPositioned;
- std::string mSavedTitle;
LLUIString mTypingStart;
bool mMeTyping;
bool mOtherTyping;
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 6e58a66bcd..d43381041b 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -43,7 +43,7 @@
#include "lltoolbarview.h"
#include "llfloaterimnearbychat.h"
-const F32 REFRESH_INTERVAL = 0.2f;
+const F32 REFRESH_INTERVAL = 1.0f;
LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id)
: LLTransientDockableFloater(NULL, true, session_id)