summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorLeyla Farazha <leyla@lindenlab.com>2010-09-13 14:59:31 -0700
committerLeyla Farazha <leyla@lindenlab.com>2010-09-13 14:59:31 -0700
commita923da7fc78b44cd5368d26652b0204322f064a4 (patch)
tree57c9820872c0d14c919a9d8ccc4f226b6b4c6f70 /indra
parent7ca63c963dd6a3015b580ef73e27f3ebb9ebb837 (diff)
DEV-52931 Toggling "View Display Names" doesn't take effect right away in the Friends list
Diffstat (limited to 'indra')
-rw-r--r--indra/llmessage/llavatarnamecache.cpp12
-rw-r--r--indra/llmessage/llavatarnamecache.h5
-rw-r--r--indra/newview/llavatarlist.cpp30
-rw-r--r--indra/newview/llavatarlist.h6
-rw-r--r--indra/newview/llavatarlistitem.cpp6
-rw-r--r--indra/newview/llavatarlistitem.h1
-rw-r--r--indra/newview/llcallfloater.cpp15
-rw-r--r--indra/newview/llcallfloater.h1
8 files changed, 68 insertions, 8 deletions
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 8158c17974..2f2d9099a3 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -41,6 +41,8 @@
namespace LLAvatarNameCache
{
+ use_display_name_signal_t mUseDisplayNamesSignal;
+
// Manual override for display names - can disable even if the region
// supports it.
bool sUseDisplayNames = true;
@@ -691,6 +693,8 @@ void LLAvatarNameCache::setUseDisplayNames(bool use)
sUseDisplayNames = use;
// flush our cache
sCache.clear();
+
+ mUseDisplayNamesSignal();
}
}
@@ -751,6 +755,13 @@ bool LLAvatarNameCache::expirationFromCacheControl(LLSD headers, F64 *expires)
return false;
}
+
+void LLAvatarNameCache::addUseDisplayNamesCallback(const use_display_name_signal_t::slot_type& cb)
+{
+ mUseDisplayNamesSignal.connect(cb);
+}
+
+
static const std::string MAX_AGE("max-age");
static const boost::char_separator<char> EQUALS_SEPARATOR("=");
static const boost::char_separator<char> COMMA_SEPARATOR(",");
@@ -809,4 +820,3 @@ bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age)
return false;
}
-
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index 6d199fd09a..8f21ace96a 100644
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
@@ -37,6 +37,9 @@ class LLUUID;
namespace LLAvatarNameCache
{
+
+ typedef boost::signals2::signal<void (void)> use_display_name_signal_t;
+
// Until the cache is set running, immediate lookups will fail and
// async lookups will be queued. This allows us to block requests
// until we know if the first region supports display names.
@@ -88,6 +91,8 @@ namespace LLAvatarNameCache
// Compute name expiration time from HTTP Cache-Control header,
// or return default value, in seconds from epoch.
F64 nameExpirationFromHeaders(LLSD headers);
+
+ void addUseDisplayNamesCallback(const use_display_name_signal_t::slot_type& cb);
}
// Parse a cache-control header to get the max-age delta-seconds.
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 24596e5723..9b1e7c3f45 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -117,6 +117,7 @@ LLAvatarList::LLAvatarList(const Params& p)
, mShowLastInteractionTime(p.show_last_interaction_time)
, mContextMenu(NULL)
, mDirty(true) // to force initial update
+, mNeedUpdateNames(false)
, mLITUpdateTimer(NULL)
, mShowIcons(true)
, mShowInfoBtn(p.show_info_btn)
@@ -134,8 +135,17 @@ LLAvatarList::LLAvatarList(const Params& p)
mLITUpdateTimer->setTimerExpirySec(0); // zero to force initial update
mLITUpdateTimer->start();
}
+
+ LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLAvatarList::handleDisplayNamesOptionChanged, this));
+}
+
+
+void LLAvatarList::handleDisplayNamesOptionChanged()
+{
+ mNeedUpdateNames = true;
}
+
LLAvatarList::~LLAvatarList()
{
delete mLITUpdateTimer;
@@ -155,6 +165,11 @@ void LLAvatarList::draw()
LLFlatListViewEx::draw();
+ if (mNeedUpdateNames)
+ {
+ updateAvatarNames();
+ }
+
if (mDirty)
refresh();
@@ -218,7 +233,6 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i
//////////////////////////////////////////////////////////////////////////
// PROTECTED SECTION
//////////////////////////////////////////////////////////////////////////
-
void LLAvatarList::refresh()
{
bool have_names = TRUE;
@@ -329,6 +343,20 @@ void LLAvatarList::refresh()
onCommit();
}
+void LLAvatarList::updateAvatarNames()
+{
+ std::vector<LLPanel*> items;
+ getItems(items);
+
+ for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+ {
+ LLAvatarListItem* item = static_cast<LLAvatarListItem*>(*it);
+ item->updateAvatarName();
+ }
+ mNeedUpdateNames = false;
+}
+
+
bool LLAvatarList::filterHasMatches()
{
uuid_vec_t values = getIDs();
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 48bc76828e..0d34dce6d8 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -93,6 +93,7 @@ public:
virtual S32 notifyParent(const LLSD& info);
void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);
+ void handleDisplayNamesOptionChanged();
protected:
void refresh();
@@ -102,14 +103,17 @@ protected:
const uuid_vec_t& vnew,
uuid_vec_t& vadded,
uuid_vec_t& vremoved);
- void updateLastInteractionTimes();
+ void updateLastInteractionTimes();
+ void rebuildNames();
void onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
+ void updateAvatarNames();
private:
bool mIgnoreOnlineStatus;
bool mShowLastInteractionTime;
bool mDirty;
+ bool mNeedUpdateNames;
bool mShowIcons;
bool mShowInfoBtn;
bool mShowProfileBtn;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 51444569c1..d08943f825 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -334,6 +334,12 @@ std::string LLAvatarListItem::getAvatarToolTip() const
return mAvatarName->getToolTip();
}
+void LLAvatarListItem::updateAvatarName()
+{
+ LLAvatarNameCache::get(getAvatarId(),
+ boost::bind(&LLAvatarListItem::onAvatarNameCache, this, _2));
+}
+
//== PRIVATE SECITON ==========================================================
void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 7bba6fdbd0..812b7dbe7d 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -86,6 +86,7 @@ public:
virtual void changed(U32 mask); // from LLFriendObserver
void setOnline(bool online);
+ void updateAvatarName(); // re-query the name cache
void setAvatarName(const std::string& name);
void setAvatarToolTip(const std::string& tooltip);
void setHighlight(const std::string& highlight);
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index c0babc6851..bf976f6b66 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -114,6 +114,9 @@ LLCallFloater::LLCallFloater(const LLSD& key)
// force docked state since this floater doesn't save it between recreations
setDocked(true);
+
+ // update the agent's name if display name setting change
+ LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
}
LLCallFloater::~LLCallFloater()
@@ -460,15 +463,12 @@ void LLCallFloater::setModeratorMutedVoice(bool moderator_muted)
mSpeakingIndicator->setIsMuted(moderator_muted);
}
-void LLCallFloater::updateAgentModeratorState()
+void LLCallFloater::onModeratorNameCache(const LLAvatarName& av_name)
{
std::string name;
- // Just use display name, because it's you
- LLAvatarName av_name;
- LLAvatarNameCache::get(gAgentID, &av_name);
name = av_name.mDisplayName;
- if(gAgent.isInGroup(mSpeakerManager->getSessionID()))
+ if(mSpeakerManager && gAgent.isInGroup(mSpeakerManager->getSessionID()))
{
// This method can be called when LLVoiceChannel.mState == STATE_NO_CHANNEL_INFO
// in this case there are not any speakers yet.
@@ -486,6 +486,11 @@ void LLCallFloater::updateAgentModeratorState()
mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name);
}
+void LLCallFloater::updateAgentModeratorState()
+{
+ LLAvatarNameCache::get(gAgentID, boost::bind(&LLCallFloater::onModeratorNameCache, this, _2));
+}
+
static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids)
{
// Get a list of participants from VoiceClient
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index cb4d175eb9..3bc7043353 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -126,6 +126,7 @@ private:
void initAgentData();
void setModeratorMutedVoice(bool moderator_muted);
void updateAgentModeratorState();
+ void onModeratorNameCache(const LLAvatarName& av_name);
/**
* Sets initial participants voice states in avatar list (Invited, Joined, Has Left).