summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llnotifications.cpp14
-rw-r--r--indra/llui/llurlentry.cpp28
-rw-r--r--indra/llui/llurlentry.h16
-rwxr-xr-xindra/newview/llavataractions.cpp8
-rwxr-xr-xindra/newview/llavatariconctrl.cpp11
-rw-r--r--indra/newview/llavatarlistitem.cpp11
-rw-r--r--indra/newview/llcallingcard.cpp4
-rw-r--r--indra/newview/llchathistory.cpp11
-rw-r--r--indra/newview/llconversationlog.cpp10
-rw-r--r--indra/newview/llconversationlog.h10
-rw-r--r--indra/newview/llconversationmodel.cpp46
-rwxr-xr-xindra/newview/llconversationmodel.h6
-rw-r--r--indra/newview/llfloaterdisplayname.cpp10
-rw-r--r--indra/newview/llfloaterimcontainer.cpp2
-rw-r--r--indra/newview/llfloaterinspect.cpp46
-rw-r--r--indra/newview/llfloaterinspect.h8
-rwxr-xr-xindra/newview/llfloaterpreference.cpp13
-rw-r--r--indra/newview/llfloaterreporter.cpp16
-rw-r--r--indra/newview/llfloaterreporter.h1
-rw-r--r--indra/newview/llfloatersellland.cpp17
-rw-r--r--indra/newview/llfloatervoicevolume.cpp15
-rw-r--r--indra/newview/llimview.cpp26
-rw-r--r--indra/newview/llimview.h12
-rw-r--r--indra/newview/llinspectavatar.cpp18
-rw-r--r--indra/newview/llinventorybridge.cpp4
-rw-r--r--indra/newview/llnamelistctrl.cpp15
-rw-r--r--indra/newview/llnamelistctrl.h8
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp18
-rw-r--r--indra/newview/llpanelgroupgeneral.h1
-rw-r--r--indra/newview/llpanelgroupinvite.cpp36
-rw-r--r--indra/newview/llpanelgrouproles.cpp17
-rw-r--r--indra/newview/llpanelgrouproles.h1
-rw-r--r--indra/newview/llpanelplaceprofile.cpp8
-rw-r--r--indra/newview/llpanelplaceprofile.h2
-rw-r--r--indra/newview/llpathfindingobject.cpp1
-rw-r--r--indra/newview/lltoolpie.cpp20
-rw-r--r--indra/newview/llviewerdisplayname.cpp7
-rwxr-xr-xindra/newview/llviewermessage.cpp19
-rwxr-xr-xindra/newview/llvoavatar.cpp5
-rw-r--r--indra/newview/llvoicevivox.cpp17
-rw-r--r--indra/newview/llvoicevivox.h1
41 files changed, 369 insertions, 170 deletions
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 9ba598995f..386345177d 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1819,21 +1819,21 @@ void LLPostponedNotification::onGroupNameCache(const LLUUID& id,
void LLPostponedNotification::fetchAvatarName(const LLUUID& id)
{
- if (mAvatarNameCacheConnection.connected())
- {
- mAvatarNameCacheConnection.disconnect();
- }
-
if (id.notNull())
{
- mAvatarNameCacheConnection = LLAvatarNameCache::get(id,
- boost::bind(&LLPostponedNotification::onAvatarNameCache, this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(id, boost::bind(&LLPostponedNotification::onAvatarNameCache, this, _1, _2));
}
}
void LLPostponedNotification::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
std::string name = av_name.getCompleteName();
// from PE merge - we should figure out if this is the right thing to do
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 47a780b7dc..99ee688888 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -340,7 +340,8 @@ std::string LLUrlEntrySLURL::getLocation(const std::string &url) const
// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
// x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
//
-LLUrlEntryAgent::LLUrlEntryAgent()
+LLUrlEntryAgent::LLUrlEntryAgent() :
+ mAvatarNameCacheConnection()
{
mPattern = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/\\w+",
boost::regex::perl|boost::regex::icase);
@@ -371,7 +372,9 @@ void LLUrlEntryAgent::callObservers(const std::string &id,
void LLUrlEntryAgent::onAvatarNameCache(const LLUUID& id,
const LLAvatarName& av_name)
{
- std::string label = av_name.getCompleteName();
+ mAvatarNameCacheConnection.disconnect();
+
+ std::string label = av_name.getCompleteName();
// received the agent name from the server - tell our observers
callObservers(id.asString(), label, mIcon);
@@ -456,9 +459,11 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
}
else
{
- LLAvatarNameCache::get(agent_id,
- boost::bind(&LLUrlEntryAgent::onAvatarNameCache,
- this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2));
addObserver(agent_id_string, url, cb);
return LLTrans::getString("LoadingData");
}
@@ -515,12 +520,15 @@ std::string LLUrlEntryAgent::getIcon(const std::string &url)
// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username)
// x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username)
//
-LLUrlEntryAgentName::LLUrlEntryAgentName()
+LLUrlEntryAgentName::LLUrlEntryAgentName() :
+ mAvatarNameCacheConnection()
{}
void LLUrlEntryAgentName::onAvatarNameCache(const LLUUID& id,
const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
std::string label = getName(av_name);
// received the agent name from the server - tell our observers
callObservers(id.asString(), label, mIcon);
@@ -554,9 +562,11 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab
}
else
{
- LLAvatarNameCache::get(agent_id,
- boost::bind(&LLUrlEntryAgentCompleteName::onAvatarNameCache,
- this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2));
addObserver(agent_id_string, url, cb);
return LLTrans::getString("LoadingData");
}
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 5f82721c0f..8c6c32178a 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -171,6 +171,13 @@ class LLUrlEntryAgent : public LLUrlEntryBase
{
public:
LLUrlEntryAgent();
+ ~LLUrlEntryAgent()
+ {
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ }
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getIcon(const std::string &url);
/*virtual*/ std::string getTooltip(const std::string &string) const;
@@ -181,6 +188,7 @@ protected:
/*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon);
private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
+ boost::signals2::connection mAvatarNameCacheConnection;
};
///
@@ -192,6 +200,13 @@ class LLUrlEntryAgentName : public LLUrlEntryBase, public boost::signals2::track
{
public:
LLUrlEntryAgentName();
+ ~LLUrlEntryAgentName()
+ {
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ }
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ LLStyle::Params getStyle() const;
protected:
@@ -199,6 +214,7 @@ protected:
virtual std::string getName(const LLAvatarName& avatar_name) = 0;
private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
+ boost::signals2::connection mAvatarNameCacheConnection;
};
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 23d528901a..83b2888ca8 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -94,7 +94,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::strin
LLRecentPeople::instance().add(id);
}
-void on_avatar_name_friendship(const LLUUID& id, const LLAvatarName av_name)
+static void on_avatar_name_friendship(const LLUUID& id, const LLAvatarName av_name)
{
LLAvatarActions::requestFriendshipDialog(id, av_name.getCompleteName());
}
@@ -195,8 +195,7 @@ void LLAvatarActions::startIM(const LLUUID& id)
if (id.isNull())
return;
- LLAvatarNameCache::get(id,
- boost::bind(&on_avatar_name_cache_start_im, _1, _2));
+ LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_cache_start_im, _1, _2));
}
// static
@@ -231,8 +230,7 @@ void LLAvatarActions::startCall(const LLUUID& id)
{
return;
}
- LLAvatarNameCache::get(id,
- boost::bind(&on_avatar_name_cache_start_call, _1, _2));
+ LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_cache_start_call, _1, _2));
}
// static
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 0db38c947c..714bde6f37 100755
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -261,13 +261,12 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
void LLAvatarIconCtrl::fetchAvatarName()
{
- if (mAvatarNameCacheConnection.connected())
- {
- mAvatarNameCacheConnection.disconnect();
- }
-
if (mAvatarId.notNull())
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
mAvatarNameCacheConnection = LLAvatarNameCache::get(mAvatarId, boost::bind(&LLAvatarIconCtrl::onAvatarNameCache, this, _1, _2));
}
}
@@ -314,6 +313,8 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
void LLAvatarIconCtrl::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
if (agent_id == mAvatarId)
{
// Most avatar icon controls are next to a UI element that shows
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index e52677925e..3ed0c7c482 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -154,13 +154,12 @@ void LLAvatarListItem::handleVisibilityChange ( BOOL new_visibility )
void LLAvatarListItem::fetchAvatarName()
{
- if (mAvatarNameCacheConnection.connected())
- {
- mAvatarNameCacheConnection.disconnect();
- }
-
if (mAvatarId.notNull())
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
mAvatarNameCacheConnection = LLAvatarNameCache::get(getAvatarId(), boost::bind(&LLAvatarListItem::onAvatarNameCache, this, _2));
}
}
@@ -460,6 +459,8 @@ void LLAvatarListItem::setNameInternal(const std::string& name, const std::strin
void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
setAvatarName(av_name.getDisplayName());
setAvatarToolTip(av_name.getUserName());
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 9a295faa73..30306b230f 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -704,9 +704,7 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
if(chat_notify)
{
// Look up the name of this agent for the notification
- LLAvatarNameCache::get(agent_id,
- boost::bind(&on_avatar_name_cache_notify,
- _1, _2, online, payload));
+ LLAvatarNameCache::get(agent_id,boost::bind(&on_avatar_name_cache_notify,_1, _2, online, payload));
}
mModifyMask |= LLFriendObserver::ONLINE;
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 3e25d9c457..3f959c0510 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -539,13 +539,12 @@ private:
void fetchAvatarName()
{
- if (mAvatarNameCacheConnection.connected())
- {
- mAvatarNameCacheConnection.disconnect();
- }
-
if (mAvatarID.notNull())
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
mAvatarNameCacheConnection = LLAvatarNameCache::get(mAvatarID,
boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
}
@@ -553,6 +552,8 @@ private:
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
mFrom = av_name.getDisplayName();
LLTextBox* user_name = getChild<LLTextBox>("user_name");
diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp
index 8c86871134..ff1f819d7d 100644
--- a/indra/newview/llconversationlog.cpp
+++ b/indra/newview/llconversationlog.cpp
@@ -185,7 +185,8 @@ void LLConversationLogFriendObserver::changed(U32 mask)
/* LLConversationLog implementation */
/************************************************************************/
-LLConversationLog::LLConversationLog()
+LLConversationLog::LLConversationLog() :
+ mAvatarNameCacheConnection()
{
LLControlVariable* log_instant_message = gSavedPerAccountSettings.getControl("LogInstantMessages").get();
LLControlVariable* keep_convers_log = gSavedSettings.getControl("KeepConversationLogTranscripts").get();
@@ -262,7 +263,11 @@ void LLConversationLog::createConversation(const LLIMModel::LLIMSession* session
if (LLIMModel::LLIMSession::P2P_SESSION == session->mSessionType)
{
- LLAvatarNameCache::get(session->mOtherParticipantID, boost::bind(&LLConversationLog::onAvatarNameCache, this, _1, _2, session));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(session->mOtherParticipantID, boost::bind(&LLConversationLog::onAvatarNameCache, this, _1, _2, session));
}
notifyObservers();
@@ -522,5 +527,6 @@ void LLConversationLog::onNewMessageReceived(const LLSD& data)
void LLConversationLog::onAvatarNameCache(const LLUUID& participant_id, const LLAvatarName& av_name, const LLIMModel::LLIMSession* session)
{
+ mAvatarNameCacheConnection.disconnect();
updateConversationName(session, av_name.getCompleteName());
}
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
index 8f6ac3f5d1..35462ec3a4 100644
--- a/indra/newview/llconversationlog.h
+++ b/indra/newview/llconversationlog.h
@@ -141,7 +141,14 @@ public:
private:
LLConversationLog();
-
+ virtual ~LLConversationLog()
+ {
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ }
+
void enableLogging(bool enable);
/**
@@ -176,6 +183,7 @@ private:
LLFriendObserver* mFriendObserver; // Observer of the LLAvatarTracker instance
boost::signals2::connection newMessageSignalConnection;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
class LLConversationLogObserver
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index 005439301a..0243fb1c97 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -430,36 +430,44 @@ LLConversationItemParticipant::~LLConversationItemParticipant()
void LLConversationItemParticipant::fetchAvatarName()
{
- // Disconnect any previous avatar name cache connection
- if (mAvatarNameCacheConnection.connected())
- {
- mAvatarNameCacheConnection.disconnect();
- }
-
// Request the avatar name from the cache
llassert(getUUID().notNull());
if (getUUID().notNull())
{
+ // Disconnect any previous avatar name cache connection
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
mAvatarNameCacheConnection = LLAvatarNameCache::get(getUUID(), boost::bind(&LLConversationItemParticipant::onAvatarNameCache, this, _2));
}
}
-void LLConversationItemParticipant::buildContextMenu(LLMenuGL& menu, U32 flags)
+void LLConversationItemParticipant::updateAvatarName()
{
- menuentry_vec_t items;
- menuentry_vec_t disabled_items;
-
- buildParticipantMenuOptions(items, flags);
-
- hide_context_entries(menu, items, disabled_items);
+ llassert(getUUID().notNull());
+ if (getUUID().notNull())
+ {
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(getUUID(),&av_name))
+ {
+ updateAvatarName(av_name);
+ }
+ }
}
void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+ updateAvatarName(av_name);
+}
+
+void LLConversationItemParticipant::updateAvatarName(const LLAvatarName& av_name)
+{
mName = av_name.getUserName();
mDisplayName = av_name.getDisplayName();
mNeedsRefresh = true;
- if(mParent != NULL)
+ if (mParent != NULL)
{
LLConversationItemSession* parent_session = dynamic_cast<LLConversationItemSession*>(mParent);
if (parent_session != NULL)
@@ -471,6 +479,16 @@ void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_nam
}
}
+void LLConversationItemParticipant::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+ menuentry_vec_t items;
+ menuentry_vec_t disabled_items;
+
+ buildParticipantMenuOptions(items, flags);
+
+ hide_context_entries(menu, items, disabled_items);
+}
+
LLConversationItemSession* LLConversationItemParticipant::getParentSession()
{
LLConversationItemSession* parent_session = NULL;
diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h
index 02002d8f70..01b3850f5e 100755
--- a/indra/newview/llconversationmodel.h
+++ b/indra/newview/llconversationmodel.h
@@ -195,14 +195,16 @@ public:
virtual const bool getDistanceToAgent(F64& dist) const { dist = mDistToAgent; return (dist >= 0.0); }
- void fetchAvatarName();
+ void fetchAvatarName(); // fetch and update the avatar name
+ void updateAvatarName(); // get from the cache (do *not* fetch) and update the avatar name
LLConversationItemSession* getParentSession();
void dumpDebugData();
void setModeratorOptionsVisible(bool visible) { mDisplayModeratorOptions = visible; }
private:
- void onAvatarNameCache(const LLAvatarName& av_name);
+ void onAvatarNameCache(const LLAvatarName& av_name); // callback used by fetchAvatarName
+ void updateAvatarName(const LLAvatarName& av_name);
bool mIsMuted; // default is false
bool mIsModerator; // default is false
diff --git a/indra/newview/llfloaterdisplayname.cpp b/indra/newview/llfloaterdisplayname.cpp
index be1ee77152..e2cef5630b 100644
--- a/indra/newview/llfloaterdisplayname.cpp
+++ b/indra/newview/llfloaterdisplayname.cpp
@@ -44,7 +44,7 @@ class LLFloaterDisplayName : public LLFloater
{
public:
LLFloaterDisplayName(const LLSD& key);
- virtual ~LLFloaterDisplayName() {};
+ virtual ~LLFloaterDisplayName() { }
/*virtual*/ BOOL postBuild();
void onSave();
void onReset();
@@ -58,8 +58,8 @@ private:
const LLSD& content);
};
-LLFloaterDisplayName::LLFloaterDisplayName(const LLSD& key)
- : LLFloater(key)
+LLFloaterDisplayName::LLFloaterDisplayName(const LLSD& key) :
+ LLFloater(key)
{
}
@@ -122,10 +122,6 @@ void LLFloaterDisplayName::onCacheSetName(bool success,
LLSD args;
args["DISPLAY_NAME"] = content["display_name"];
LLNotificationsUtil::add("SetDisplayNameSuccess", args);
-
- // Re-fetch my name, as it may have been sanitized by the service
- //LLAvatarNameCache::get(getAvatarId(),
- // boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
return;
}
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index f134dc2017..ae243d6495 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -377,7 +377,7 @@ void LLFloaterIMContainer::processParticipantsStyleUpdate()
{
LLConversationItemParticipant* participant_model = dynamic_cast<LLConversationItemParticipant*>(*current_participant_model);
// Get the avatar name for this participant id from the cache and update the model
- participant_model->fetchAvatarName();
+ participant_model->updateAvatarName();
// Next participant
current_participant_model++;
}
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index cece8d299c..5a1dfc99ab 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -46,7 +46,9 @@
LLFloaterInspect::LLFloaterInspect(const LLSD& key)
: LLFloater(key),
- mDirty(FALSE)
+ mDirty(FALSE),
+ mOwnerNameCacheConnection(),
+ mCreatorNameCacheConnection()
{
mCommitCallbackRegistrar.add("Inspect.OwnerProfile", boost::bind(&LLFloaterInspect::onClickOwnerProfile, this));
mCommitCallbackRegistrar.add("Inspect.CreatorProfile", boost::bind(&LLFloaterInspect::onClickCreatorProfile, this));
@@ -67,6 +69,14 @@ BOOL LLFloaterInspect::postBuild()
LLFloaterInspect::~LLFloaterInspect(void)
{
+ if (mOwnerNameCacheConnection.connected())
+ {
+ mOwnerNameCacheConnection.disconnect();
+ }
+ if (mCreatorNameCacheConnection.connected())
+ {
+ mCreatorNameCacheConnection.disconnect();
+ }
if(!LLFloaterReg::instanceVisible("build"))
{
if(LLToolMgr::getInstance()->getBaseTool() == LLToolCompInspect::getInstance())
@@ -80,7 +90,6 @@ LLFloaterInspect::~LLFloaterInspect(void)
{
LLFloaterReg::showInstance("build", LLSD(), TRUE);
}
- //sInstance = NULL;
}
void LLFloaterInspect::onOpen(const LLSD& key)
@@ -167,15 +176,6 @@ LLUUID LLFloaterInspect::getSelectedUUID()
return LLUUID::null;
}
-void LLFloaterInspect::onGetAvNameCallback(const LLUUID& idCreator, const LLAvatarName& av_name, void* FloaterPtr)
-{
- if (FloaterPtr)
- {
- LLFloaterInspect* floater = (LLFloaterInspect*)FloaterPtr;
- floater->dirty();
- }
-}
-
void LLFloaterInspect::refresh()
{
LLUUID creator_id;
@@ -229,7 +229,11 @@ void LLFloaterInspect::refresh()
else
{
owner_name = LLTrans::getString("RetrievingData");
- LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::onGetAvNameCallback, _1, _2, this));
+ if (mOwnerNameCacheConnection.connected())
+ {
+ mOwnerNameCacheConnection.disconnect();
+ }
+ mOwnerNameCacheConnection = LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::onGetOwnerNameCallback, this));
}
if (LLAvatarNameCache::get(idCreator, &av_name))
@@ -239,7 +243,11 @@ void LLFloaterInspect::refresh()
else
{
creator_name = LLTrans::getString("RetrievingData");
- LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::onGetAvNameCallback, _1, _2, this));
+ if (mCreatorNameCacheConnection.connected())
+ {
+ mCreatorNameCacheConnection.disconnect();
+ }
+ mCreatorNameCacheConnection = LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::onGetCreatorNameCallback, this));
}
row["id"] = obj->getObject()->getID();
@@ -289,6 +297,18 @@ void LLFloaterInspect::dirty()
setDirty();
}
+void LLFloaterInspect::onGetOwnerNameCallback()
+{
+ mOwnerNameCacheConnection.disconnect();
+ setDirty();
+}
+
+void LLFloaterInspect::onGetCreatorNameCallback()
+{
+ mCreatorNameCacheConnection.disconnect();
+ setDirty();
+}
+
void LLFloaterInspect::draw()
{
if (mDirty)
diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h
index 7ee83ccdb4..44381eac96 100644
--- a/indra/newview/llfloaterinspect.h
+++ b/indra/newview/llfloaterinspect.h
@@ -55,8 +55,6 @@ public:
void onClickOwnerProfile();
void onSelectObject();
- static void onGetAvNameCallback(const LLUUID& idCreator, const LLAvatarName& av_name, void* FloaterPtr);
-
LLScrollListCtrl* mObjectList;
protected:
// protected members
@@ -64,13 +62,15 @@ protected:
bool mDirty;
private:
+ void onGetOwnerNameCallback();
+ void onGetCreatorNameCallback();
LLFloaterInspect(const LLSD& key);
virtual ~LLFloaterInspect(void);
- // static data
-// static LLFloaterInspect* sInstance;
LLSafeHandle<LLObjectSelection> mObjectSelection;
+ boost::signals2::connection mOwnerNameCacheConnection;
+ boost::signals2::connection mCreatorNameCacheConnection;
};
#endif //LL_LLFLOATERINSPECT_H
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 13d8a79f8d..3d4a1c44d8 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1682,6 +1682,17 @@ LLPanelPreference::LLPanelPreference()
//virtual
BOOL LLPanelPreference::postBuild()
{
+ ////////////////////// PanelGeneral ///////////////////
+ if (hasChild("display_names_check"))
+ {
+ BOOL use_people_api = gSavedSettings.getBOOL("UsePeopleAPI");
+ LLCheckBoxCtrl* ctrl_display_name = getChild<LLCheckBoxCtrl>("display_names_check");
+ ctrl_display_name->setEnabled(use_people_api);
+ if (!use_people_api)
+ {
+ ctrl_display_name->setValue(FALSE);
+ }
+ }
////////////////////// PanelVoice ///////////////////
if (hasChild("voice_unavailable"))
@@ -1732,7 +1743,7 @@ BOOL LLPanelPreference::postBuild()
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&showFavoritesOnLoginWarning, _1, _2));
}
- // Panel Advanced
+ //////////////////////PanelAdvanced ///////////////////
if (hasChild("modifier_combo"))
{
//localizing if push2talk button is set to middle mouse
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index cf2481f99a..0e4c7406c5 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -103,7 +103,8 @@ LLFloaterReporter::LLFloaterReporter(const LLSD& key)
mPicking( FALSE),
mPosition(),
mCopyrightWarningSeen( FALSE ),
- mResourceDatap(new LLResourceData())
+ mResourceDatap(new LLResourceData()),
+ mAvatarNameCacheConnection()
{
}
@@ -187,6 +188,11 @@ BOOL LLFloaterReporter::postBuild()
// virtual
LLFloaterReporter::~LLFloaterReporter()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+
// child views automatically deleted
mObjectID = LLUUID::null;
@@ -313,11 +319,17 @@ void LLFloaterReporter::setFromAvatarID(const LLUUID& avatar_id)
std::string avatar_link = LLSLURL("agent", mObjectID, "inspect").getSLURLString();
getChild<LLUICtrl>("owner_name")->setValue(avatar_link);
- LLAvatarNameCache::get(avatar_id, boost::bind(&LLFloaterReporter::onAvatarNameCache, this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(avatar_id, boost::bind(&LLFloaterReporter::onAvatarNameCache, this, _1, _2));
}
void LLFloaterReporter::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
if (mObjectID == avatar_id)
{
mOwnerName = av_name.getCompleteName();
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
index 7d68431710..d54e7f6ab0 100644
--- a/indra/newview/llfloaterreporter.h
+++ b/indra/newview/llfloaterreporter.h
@@ -137,6 +137,7 @@ private:
std::list<LLMeanCollisionData*> mMCDList;
std::string mDefaultSummary;
LLResourceData* mResourceDatap;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
#endif
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index c97a6792f3..0cb37dabe7 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -81,6 +81,7 @@ private:
LLUUID mAuthorizedBuyer;
bool mParcelSoldWithObjects;
SelectionObserver mParcelSelectionObserver;
+ boost::signals2::connection mAvatarNameCacheConnection;
void updateParcelInfo();
void refreshUI();
@@ -129,13 +130,18 @@ LLFloater* LLFloaterSellLand::buildFloater(const LLSD& key)
LLFloaterSellLandUI::LLFloaterSellLandUI(const LLSD& key)
: LLFloater(key),
mParcelSelectionObserver(this),
- mRegion(0)
+ mRegion(0),
+ mAvatarNameCacheConnection()
{
LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
}
LLFloaterSellLandUI::~LLFloaterSellLandUI()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver);
}
@@ -230,13 +236,18 @@ void LLFloaterSellLandUI::updateParcelInfo()
if(mSellToBuyer)
{
- LLAvatarNameCache::get(mAuthorizedBuyer,
- boost::bind(&LLFloaterSellLandUI::onBuyerNameCache, this, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mAuthorizedBuyer, boost::bind(&LLFloaterSellLandUI::onBuyerNameCache, this, _2));
}
}
void LLFloaterSellLandUI::onBuyerNameCache(const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
getChild<LLUICtrl>("sell_to_agent")->setValue(av_name.getCompleteName());
getChild<LLUICtrl>("sell_to_agent")->setToolTip(av_name.getUserName());
}
diff --git a/indra/newview/llfloatervoicevolume.cpp b/indra/newview/llfloatervoicevolume.cpp
index a1df73a065..38446e46df 100644
--- a/indra/newview/llfloatervoicevolume.cpp
+++ b/indra/newview/llfloatervoicevolume.cpp
@@ -81,12 +81,14 @@ private:
LLUUID mAvatarID;
// Need avatar name information to spawn friend add request
LLAvatarName mAvatarName;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
LLFloaterVoiceVolume::LLFloaterVoiceVolume(const LLSD& sd)
: LLInspect(LLSD()) // single_instance, doesn't really need key
, mAvatarID() // set in onOpen() *Note: we used to show partner's name but we dont anymore --angela 3rd Dec*
, mAvatarName()
+, mAvatarNameCacheConnection()
{
LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::GLOBAL, this);
LLTransientFloater::init(this);
@@ -94,6 +96,10 @@ LLFloaterVoiceVolume::LLFloaterVoiceVolume(const LLSD& sd)
LLFloaterVoiceVolume::~LLFloaterVoiceVolume()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
LLTransientFloaterMgr::getInstance()->removeControlView(this);
}
@@ -126,8 +132,11 @@ void LLFloaterVoiceVolume::onOpen(const LLSD& data)
getChild<LLUICtrl>("avatar_name")->setValue("");
updateVolumeControls();
- LLAvatarNameCache::get(mAvatarID,
- boost::bind(&LLFloaterVoiceVolume::onAvatarNameCache, this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mAvatarID, boost::bind(&LLFloaterVoiceVolume::onAvatarNameCache, this, _1, _2));
}
void LLFloaterVoiceVolume::updateVolumeControls()
@@ -190,6 +199,8 @@ void LLFloaterVoiceVolume::onAvatarNameCache(
const LLUUID& agent_id,
const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
if (agent_id != mAvatarID)
{
return;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index adc34cc9a4..0011f54175 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -292,7 +292,8 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
mTextIMPossible(true),
mOtherParticipantIsAvatar(true),
mStartCallOnInitialize(false),
- mStartedAsIMCall(voice)
+ mStartedAsIMCall(voice),
+ mAvatarNameCacheConnection()
{
// set P2P type by default
mSessionType = P2P_SESSION;
@@ -373,14 +374,14 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
// history files have consistent (English) names in different locales.
if (isAdHocSessionType() && IM_SESSION_INVITE == mType)
{
- LLAvatarNameCache::get(mOtherParticipantID,
- boost::bind(&LLIMModel::LLIMSession::onAdHocNameCache,
- this, _2));
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mOtherParticipantID,boost::bind(&LLIMModel::LLIMSession::onAdHocNameCache,this, _2));
}
}
void LLIMModel::LLIMSession::onAdHocNameCache(const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
if (!av_name.isValidName())
{
S32 separator_index = mName.rfind(" ");
@@ -489,6 +490,11 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES
LLIMModel::LLIMSession::~LLIMSession()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+
delete mSpeakers;
mSpeakers = NULL;
@@ -2096,7 +2102,8 @@ BOOL LLOutgoingCallDialog::postBuild()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LLIncomingCallDialog::LLIncomingCallDialog(const LLSD& payload) :
-LLCallDialog(payload)
+LLCallDialog(payload),
+mAvatarNameCacheConnection()
{
}
@@ -2166,9 +2173,11 @@ BOOL LLIncomingCallDialog::postBuild()
else
{
// Get the full name information
- LLAvatarNameCache::get(caller_id,
- boost::bind(&LLIncomingCallDialog::onAvatarNameCache,
- this, _1, _2, call_type));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(caller_id, boost::bind(&LLIncomingCallDialog::onAvatarNameCache, this, _1, _2, call_type));
}
setIcon(session_id, caller_id);
@@ -2211,6 +2220,7 @@ void LLIncomingCallDialog::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name,
const std::string& call_type)
{
+ mAvatarNameCacheConnection.disconnect();
std::string title = av_name.getCompleteName();
setCallerName(title, av_name.getCompleteName(), call_type);
}
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 9dbbd7738a..8578fa8c06 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -142,6 +142,7 @@ public:
void onAdHocNameCache(const LLAvatarName& av_name);
static LLUUID generateHash(const std::set<LLUUID>& sorted_uuids);
+ boost::signals2::connection mAvatarNameCacheConnection;
};
@@ -547,7 +548,14 @@ class LLIncomingCallDialog : public LLCallDialog
{
public:
LLIncomingCallDialog(const LLSD& payload);
-
+ ~LLIncomingCallDialog()
+ {
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ }
+
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
@@ -564,6 +572,8 @@ private:
const LLAvatarName& av_name,
const std::string& call_type);
+ boost::signals2::connection mAvatarNameCacheConnection;
+
/*virtual*/ void onLifetimeExpired();
};
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 3507b729be..26d3a2bd12 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -88,6 +88,7 @@ private:
// an in-flight request for avatar properties from LLAvatarPropertiesProcessor
// is represented by this object
LLFetchAvatarData* mPropertiesRequest;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
//////////////////////////////////////////////////////////////////////////////
@@ -140,7 +141,8 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
: LLInspect( LLSD() ), // single_instance, doesn't really need key
mAvatarID(), // set in onOpen() *Note: we used to show partner's name but we dont anymore --angela 3rd Dec*
mAvatarName(),
- mPropertiesRequest(NULL)
+ mPropertiesRequest(NULL),
+ mAvatarNameCacheConnection()
{
// can't make the properties request until the widgets are constructed
// as it might return immediately, so do it in onOpen.
@@ -151,6 +153,10 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
LLInspectAvatar::~LLInspectAvatar()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
// clean up any pending requests so they don't call back into a deleted
// view
delete mPropertiesRequest;
@@ -226,9 +232,11 @@ void LLInspectAvatar::requestUpdate()
getChild<LLUICtrl>("avatar_icon")->setValue(LLSD(mAvatarID) );
- LLAvatarNameCache::get(mAvatarID,
- boost::bind(&LLInspectAvatar::onAvatarNameCache,
- this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mAvatarID,boost::bind(&LLInspectAvatar::onAvatarNameCache,this, _1, _2));
}
void LLInspectAvatar::processAvatarData(LLAvatarData* data)
@@ -261,6 +269,8 @@ void LLInspectAvatar::onAvatarNameCache(
const LLUUID& agent_id,
const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
if (agent_id == mAvatarID)
{
getChild<LLUICtrl>("user_name")->setValue(av_name.getDisplayName());
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 1e60b10a68..cb6290368c 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4713,9 +4713,7 @@ void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string act
if (item && (item->getCreatorUUID() != gAgent.getID()) &&
(!item->getCreatorUUID().isNull()))
{
- std::string callingcard_name;
- gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
- // IDEVO
+ std::string callingcard_name = LLCacheName::getDefaultName();
LLAvatarName av_name;
if (LLAvatarNameCache::get(item->getCreatorUUID(), &av_name))
{
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 855007e403..7f396b7b7e 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -64,7 +64,8 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)
mNameColumnIndex(p.name_column.column_index),
mNameColumn(p.name_column.column_name),
mAllowCallingCardDrop(p.allow_calling_card_drop),
- mShortNames(p.short_names)
+ mShortNames(p.short_names),
+ mAvatarNameCacheConnection()
{}
// public
@@ -327,9 +328,13 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
else
{
// ...schedule a callback
- LLAvatarNameCache::get(id,
- boost::bind(&LLNameListCtrl::onAvatarNameCache,
- this, _1, _2, item->getHandle()));
+ // This is not correct and will likely lead to partially populated lists in cases where avatar names are not cached.
+ // *TODO : Change this to have 2 callbacks : one callback per list item and one for the whole list.
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(id,boost::bind(&LLNameListCtrl::onAvatarNameCache,this, _1, _2, item->getHandle()));
}
break;
}
@@ -388,6 +393,8 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name,
LLHandle<LLNameListItem> item)
{
+ mAvatarNameCacheConnection.disconnect();
+
std::string name;
if (mShortNames)
name = av_name.getDisplayName();
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 3ac0565761..271802d48a 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -111,6 +111,13 @@ public:
protected:
LLNameListCtrl(const Params&);
+ virtual ~LLNameListCtrl()
+ {
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ }
friend class LLUICtrlFactory;
public:
// Add a user to the list by name. It will be added, the name
@@ -154,6 +161,7 @@ private:
std::string mNameColumn;
BOOL mAllowCallingCardDrop;
bool mShortNames; // display name only, no SLID
+ boost::signals2::connection mAvatarNameCacheConnection;
};
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 993ffb7825..0cd93b330a 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -79,13 +79,18 @@ LLPanelGroupGeneral::LLPanelGroupGeneral()
mCtrlReceiveNotices(NULL),
mCtrlListGroup(NULL),
mActiveTitleLabel(NULL),
- mComboActiveTitle(NULL)
+ mComboActiveTitle(NULL),
+ mAvatarNameCacheConnection()
{
}
LLPanelGroupGeneral::~LLPanelGroupGeneral()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
}
BOOL LLPanelGroupGeneral::postBuild()
@@ -727,9 +732,12 @@ void LLPanelGroupGeneral::updateMembers()
else
{
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
- LLAvatarNameCache::get(mMemberProgress->first,
- boost::bind(&LLPanelGroupGeneral::onNameCache,
- this, gdatap->getMemberVersion(), member, _2));
+ // *TODO : Use a callback per member, not for the panel group.
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupGeneral::onNameCache, this, gdatap->getMemberVersion(), member, _2));
}
}
@@ -769,6 +777,8 @@ void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)
void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!gdatap
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 1b4e8e2645..b7f4a01139 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -111,6 +111,7 @@ private:
LLComboBox *mComboMature;
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
#endif
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 3f0c6c4613..133b269c11 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -89,6 +89,8 @@ public:
void (*mCloseCallback)(void* data);
void* mCloseCallbackUserData;
+
+ boost::signals2::connection mAvatarNameCacheConnection;
};
@@ -102,12 +104,17 @@ LLPanelGroupInvite::impl::impl(const LLUUID& group_id):
mGroupName( NULL ),
mConfirmedOwnerInvite( false ),
mCloseCallback( NULL ),
- mCloseCallbackUserData( NULL )
+ mCloseCallbackUserData( NULL ),
+ mAvatarNameCacheConnection()
{
}
LLPanelGroupInvite::impl::~impl()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
}
void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names,
@@ -380,8 +387,24 @@ void LLPanelGroupInvite::impl::callbackAddUsers(const uuid_vec_t& agent_ids, voi
std::vector<std::string> names;
for (S32 i = 0; i < (S32)agent_ids.size(); i++)
{
- LLAvatarNameCache::get(agent_ids[i],
- boost::bind(&LLPanelGroupInvite::impl::onAvatarNameCache, _1, _2, user_data));
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(agent_ids[i], &av_name))
+ {
+ LLPanelGroupInvite::impl::onAvatarNameCache(agent_ids[i], av_name, user_data);
+ }
+ else
+ {
+ impl* selfp = (impl*) user_data;
+ if (selfp)
+ {
+ if (selfp->mAvatarNameCacheConnection.connected())
+ {
+ selfp->mAvatarNameCacheConnection.disconnect();
+ }
+ // *TODO : Add a callback per avatar name being fetched.
+ selfp->mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_ids[i],boost::bind(&LLPanelGroupInvite::impl::onAvatarNameCache, _1, _2, user_data));
+ }
+ }
}
}
@@ -394,6 +417,10 @@ void LLPanelGroupInvite::impl::onAvatarNameCache(const LLUUID& agent_id,
if (selfp)
{
+ if (selfp->mAvatarNameCacheConnection.connected())
+ {
+ selfp->mAvatarNameCacheConnection.disconnect();
+ }
std::vector<std::string> names;
uuid_vec_t agent_ids;
agent_ids.push_back(agent_id);
@@ -473,8 +500,7 @@ void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)
if (!LLAvatarNameCache::get(agent_id, &av_name))
{
// actually it should happen, just in case
- LLAvatarNameCache::get(LLUUID(agent_id), boost::bind(
- &LLPanelGroupInvite::addUserCallback, this, _1, _2));
+ //LLAvatarNameCache::get(LLUUID(agent_id), boost::bind(&LLPanelGroupInvite::addUserCallback, this, _1, _2));
// for this special case!
//when there is no cached name we should remove resident from agent_ids list to avoid breaking of sequence
// removed id will be added in callback
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 98e4cded6c..cfdac11d26 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -743,12 +743,17 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()
mChanged(FALSE),
mPendingMemberUpdate(FALSE),
mHasMatch(FALSE),
- mNumOwnerAdditions(0)
+ mNumOwnerAdditions(0),
+ mAvatarNameCacheConnection()
{
}
LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
if (mMembersList)
{
gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());
@@ -1604,6 +1609,8 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)
void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
+
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!gdatap
|| gdatap->getMemberVersion() != update_id
@@ -1675,8 +1682,12 @@ void LLPanelGroupMembersSubTab::updateMembers()
else
{
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
- LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache,
- this, gdatap->getMemberVersion(), mMemberProgress->second, _2));
+ // *TODO : Add one callback per fetched avatar name
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2));
}
}
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index bead8bd85b..78bb3c57a1 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -214,6 +214,7 @@ protected:
U32 mNumOwnerAdditions;
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
+ boost::signals2::connection mAvatarNameCacheConnection;
};
class LLPanelGroupRolesSubTab : public LLPanelGroupSubTab
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index ce8057eead..83b70d9f29 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -499,9 +499,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
std::string parcel_owner =
LLSLURL("agent", parcel->getOwnerID(), "inspect").getSLURLString();
mParcelOwner->setText(parcel_owner);
- LLAvatarNameCache::get(region->getOwner(),
- boost::bind(&LLPanelPlaceInfo::onAvatarNameCache,
- _1, _2, mRegionOwnerText));
+ LLAvatarNameCache::get(region->getOwner(), boost::bind(&LLPanelPlaceInfo::onAvatarNameCache, _1, _2, mRegionOwnerText));
}
if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
@@ -523,9 +521,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
if(auth_buyer_id.notNull())
{
- LLAvatarNameCache::get(auth_buyer_id,
- boost::bind(&LLPanelPlaceInfo::onAvatarNameCache,
- _1, _2, mSaleToText));
+ LLAvatarNameCache::get(auth_buyer_id, boost::bind(&LLPanelPlaceInfo::onAvatarNameCache, _1, _2, mSaleToText));
// Show sales info to a specific person or a group he belongs to.
if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index a33fc12ce4..f4c6145881 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -38,7 +38,7 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
public:
LLPanelPlaceProfile();
/*virtual*/ ~LLPanelPlaceProfile();
-
+
/*virtual*/ BOOL postBuild();
/*virtual*/ void resetLocation();
diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp
index 858d3203c0..900763eae4 100644
--- a/indra/newview/llpathfindingobject.cpp
+++ b/indra/newview/llpathfindingobject.cpp
@@ -173,6 +173,7 @@ void LLPathfindingObject::fetchOwnerName()
mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);
if (!mHasOwnerName)
{
+ disconnectAvatarNameCacheConnection();
mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));
}
}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index c81f6ace70..babb5065f7 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -972,24 +972,8 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
|| !existing_inspector->getVisible()
|| existing_inspector->getKey()["avatar_id"].asUUID() != hover_object->getID())
{
- // IDEVO: try to get display name + username
+ // Try to get display name + username
std::string final_name;
- std::string full_name;
- if (!gCacheName->getFullName(hover_object->getID(), full_name))
- {
- LLNameValue* firstname = hover_object->getNVPair("FirstName");
- LLNameValue* lastname = hover_object->getNVPair("LastName");
- if (firstname && lastname)
- {
- full_name = LLCacheName::buildFullName(
- firstname->getString(), lastname->getString());
- }
- else
- {
- full_name = LLTrans::getString("TooltipPerson");
- }
- }
-
LLAvatarName av_name;
if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
{
@@ -997,7 +981,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
}
else
{
- final_name = full_name;
+ final_name = LLTrans::getString("TooltipPerson");;
}
// *HACK: We may select this object, so pretend it was clicked
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 4bd38562bc..6bd5631df6 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -53,6 +53,7 @@ namespace LLViewerDisplayName
sNameChangedSignal.connect(cb);
}
+ void doNothing() { }
}
class LLSetDisplayNameResponder : public LLHTTPClient::Responder
@@ -139,9 +140,9 @@ public:
LLUUID agent_id = gAgent.getID();
// Flush stale data
LLAvatarNameCache::erase( agent_id );
- // Queue request for new data
- LLAvatarName ignored;
- LLAvatarNameCache::get( agent_id, &ignored );
+ // Queue request for new data: nothing to do on callback though...
+ // Note: no need to disconnect the callback as it never gets out of scope
+ LLAvatarNameCache::get(agent_id, boost::bind(&LLViewerDisplayName::doNothing));
// Kill name tag, as it is wrong
LLVOAvatar::invalidateNameTag( agent_id );
}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d264a18597..db81e057de 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2257,7 +2257,7 @@ static std::string clean_name_from_task_im(const std::string& msg,
return msg;
}
-void notification_display_name_callback(const LLUUID& id,
+static void notification_display_name_callback(const LLUUID& id,
const LLAvatarName& av_name,
const std::string& name,
LLSD& substitutions,
@@ -2281,7 +2281,7 @@ protected:
};
// Callback for name resolution of a god/estate message
-void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string message)
+static void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string message)
{
LLSD args;
args["NAME"] = av_name.getCompleteName();
@@ -3214,12 +3214,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
args["NAME"] = name;
LLSD payload;
payload["from_id"] = from_id;
- LLAvatarNameCache::get(from_id, boost::bind(&notification_display_name_callback,
- _1,
- _2,
- "FriendshipAccepted",
- args,
- payload));
+ LLAvatarNameCache::get(from_id, boost::bind(&notification_display_name_callback,_1,_2,"FriendshipAccepted",args,payload));
}
break;
@@ -5653,11 +5648,9 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
_1, _2, _3,
notification, final_args, payload));
}
- else {
- LLAvatarNameCache::get(name_id,
- boost::bind(&money_balance_avatar_notify,
- _1, _2,
- notification, final_args, payload));
+ else
+ {
+ LLAvatarNameCache::get(name_id, boost::bind(&money_balance_avatar_notify, _1, _2, notification, final_args, payload));
}
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 19c7eda717..ea7bf29209 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3177,8 +3177,9 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
LLAvatarName av_name;
if (!LLAvatarNameCache::get(getID(), &av_name))
{
- // ...call this function back when the name arrives and force a rebuild
- LLAvatarNameCache::get(getID(),boost::bind(&LLVOAvatar::clearNameTag, this));
+ // Force a rebuild at next idle
+ // Note: do not connect a callback on idle().
+ clearNameTag();
}
// Might be blank if name not available yet, that's OK
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index cd93b3da28..5e121bbcee 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -316,7 +316,9 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() :
mCaptureBufferRecording(false),
mCaptureBufferRecorded(false),
mCaptureBufferPlaying(false),
- mPlayRequestCount(0)
+ mPlayRequestCount(0),
+
+ mAvatarNameCacheConnection()
{
mSpeakerVolume = scale_speaker_volume(0);
@@ -349,6 +351,10 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() :
LLVivoxVoiceClient::~LLVivoxVoiceClient()
{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
}
//---------------------------------------------------
@@ -6192,14 +6198,17 @@ void LLVivoxVoiceClient::notifyFriendObservers()
void LLVivoxVoiceClient::lookupName(const LLUUID &id)
{
- LLAvatarNameCache::get(id,
- boost::bind(&LLVivoxVoiceClient::onAvatarNameCache,
- this, _1, _2));
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(id, boost::bind(&LLVivoxVoiceClient::onAvatarNameCache, this, _1, _2));
}
void LLVivoxVoiceClient::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name)
{
+ mAvatarNameCacheConnection.disconnect();
std::string display_name = av_name.getDisplayName();
avatarNameResolved(agent_id, display_name);
}
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index f2a3a7d3dd..69f33df94b 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -641,6 +641,7 @@ protected:
void lookupName(const LLUUID &id);
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
void avatarNameResolved(const LLUUID &id, const std::string &name);
+ boost::signals2::connection mAvatarNameCacheConnection;
/////////////////////////////
// Voice fonts