summaryrefslogtreecommitdiff
path: root/indra/newview/llnamelistctrl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llnamelistctrl.cpp')
-rw-r--r--indra/newview/llnamelistctrl.cpp97
1 files changed, 79 insertions, 18 deletions
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index fe75ab8e50..d7c5364fba 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -32,7 +32,9 @@
#include "llavatarnamecache.h"
#include "llcachename.h"
+#include "llfloater.h"
#include "llfloaterreg.h"
+#include "llfloatersnapshot.h" // gSnapshotFloaterView
#include "llinventory.h"
#include "llscrolllistitem.h"
#include "llscrolllistcell.h"
@@ -212,7 +214,10 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
BOOL handled = FALSE;
S32 column_index = getColumnIndexFromOffset(x);
LLNameListItem* hit_item = dynamic_cast<LLNameListItem*>(hitItem(x, y));
- if (hit_item
+ LLFloater* floater = gFloaterView->getParentFloater(this);
+ if (floater
+ && floater->isFrontmost()
+ && hit_item
&& column_index == mNameColumnIndex)
{
// ...this is the column with the avatar name
@@ -232,24 +237,30 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
// Spawn at right side of cell
LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");
- LLCoordGL pos( sticky_rect.mRight - info_icon_size, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 );
+ S32 screenX = sticky_rect.mRight - info_icon_size;
+ S32 screenY = sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight()) / 2;
+ LLCoordGL pos(screenX, screenY);
- // Should we show a group or an avatar inspector?
- bool is_group = hit_item->isGroup();
- bool is_experience = hit_item->isExperience();
+ LLFloater* snapshot_floatr = gSnapshotFloaterView->getFrontmostClosableFloater();
+ if (!snapshot_floatr || !snapshot_floatr->getRect().pointInRect(screenX + icon->getWidth(), screenY))
+ {
+ // Should we show a group or an avatar inspector?
+ bool is_group = hit_item->isGroup();
+ bool is_experience = hit_item->isExperience();
- LLToolTip::Params params;
- params.background_visible( false );
- params.click_callback( boost::bind(&LLNameListCtrl::showInspector, this, avatar_id, is_group, is_experience) );
- params.delay_time(0.0f); // spawn instantly on hover
- params.image( icon );
- params.message("");
- params.padding(0);
- params.pos(pos);
- params.sticky_rect(sticky_rect);
+ LLToolTip::Params params;
+ params.background_visible(false);
+ params.click_callback(boost::bind(&LLNameListCtrl::showInspector, this, avatar_id, is_group, is_experience));
+ params.delay_time(0.0f); // spawn instantly on hover
+ params.image(icon);
+ params.message("");
+ params.padding(0);
+ params.pos(pos);
+ params.sticky_rect(sticky_rect);
- LLToolTipMgr::getInstance()->show(params);
- handled = TRUE;
+ LLToolTipMgr::getInstance()->show(params);
+ handled = TRUE;
+ }
}
}
}
@@ -313,8 +324,19 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
switch(name_item.target)
{
case GROUP:
- gCacheName->getGroupName(id, fullname);
- // fullname will be "nobody" if group not found
+ if (!gCacheName->getGroupName(id, fullname))
+ {
+ avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(id);
+ if (it != mGroupNameCacheConnections.end())
+ {
+ if (it->second.connected())
+ {
+ it->second.disconnect();
+ }
+ mGroupNameCacheConnections.erase(it);
+ }
+ mGroupNameCacheConnections[id] = gCacheName->getGroup(id, boost::bind(&LLNameListCtrl::onGroupNameCache, this, _1, _2, item->getHandle()));
+ }
break;
case SPECIAL:
// just use supplied name
@@ -415,6 +437,20 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
}
}
+// public
+LLScrollListItem* LLNameListCtrl::getNameItemByAgentId(const LLUUID& agent_id)
+{
+ for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)
+ {
+ LLScrollListItem* item = *it;
+ if (item && item->getUUID() == agent_id)
+ {
+ return item;
+ }
+ }
+ return NULL;
+}
+
void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name,
std::string suffix,
@@ -479,6 +515,31 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
dirtyColumns();
}
+void LLNameListCtrl::onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item)
+{
+ avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(group_id);
+ if (it != mGroupNameCacheConnections.end())
+ {
+ if (it->second.connected())
+ {
+ it->second.disconnect();
+ }
+ mGroupNameCacheConnections.erase(it);
+ }
+
+ LLNameListItem* list_item = item.get();
+ if (list_item && list_item->getUUID() == group_id)
+ {
+ LLScrollListCell* cell = list_item->getColumn(mNameColumnIndex);
+ if (cell)
+ {
+ cell->setValue(name);
+ setNeedsSort();
+ }
+ }
+
+ dirtyColumns();
+}
void LLNameListCtrl::updateColumns(bool force_update)
{