merge
commit
cc5beffdf4
|
|
@ -1644,7 +1644,7 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
|
|||
}
|
||||
|
||||
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
|
||||
return focus_offset;
|
||||
return focus_offset * agent_rot;
|
||||
}
|
||||
|
||||
void LLAgentCamera::setupSitCamera()
|
||||
|
|
|
|||
|
|
@ -201,7 +201,9 @@ void LLUpdateAppearanceOnDestroy::fire(const LLUUID& inv_item)
|
|||
{
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(inv_item);
|
||||
const std::string item_name = item ? item->getName() : "ITEM NOT FOUND";
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
llinfos << "callback fired [ name:" << item_name << " UUID:" << inv_item << " count:" << mFireCount << " ] " << llendl;
|
||||
#endif
|
||||
mFireCount++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5184,12 +5184,12 @@ void LLRecentItemsFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
|
||||
menuentry_vec_t disabled_items, items = getMenuItems();
|
||||
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Folder")));
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Script")));
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Note")));
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Gesture")));
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Clothes")));
|
||||
items.erase(std::find(items.begin(), items.end(), std::string("New Body Parts")));
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Body Parts")), items.end());
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Clothes")), items.end());
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Note")), items.end());
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Gesture")), items.end());
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Script")), items.end());
|
||||
items.erase(std::remove(items.begin(), items.end(), std::string("New Folder")), items.end());
|
||||
|
||||
hide_context_entries(menu, items, disabled_items);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2447,7 +2447,9 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
|
|||
}
|
||||
LLUUID tid;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, tid);
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
llinfos << "Bulk inventory: " << tid << llendl;
|
||||
#endif
|
||||
|
||||
update_map_t update;
|
||||
cat_array_t folders;
|
||||
|
|
|
|||
|
|
@ -308,7 +308,16 @@ void LLInventoryFetchItemsObserver::startFetch()
|
|||
// assume it's agent inventory.
|
||||
owner_id = gAgent.getID();
|
||||
}
|
||||
|
||||
|
||||
// Ignore categories since they're not items. We
|
||||
// could also just add this to mComplete but not sure what the
|
||||
// side-effects would be, so ignoring to be safe.
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
|
||||
if (cat)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// It's incomplete, so put it on the incomplete container, and
|
||||
// pack this on the message.
|
||||
mIncomplete.push_back(*it);
|
||||
|
|
|
|||
|
|
@ -1038,7 +1038,7 @@ void LLPanelPlaces::showAddedLandmarkInfo(const uuid_vec_t& items)
|
|||
++item_iter)
|
||||
{
|
||||
const LLUUID& item_id = (*item_iter);
|
||||
if(!highlight_offered_item(item_id))
|
||||
if(!highlight_offered_object(item_id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -702,7 +702,7 @@ static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items,
|
|||
++item_iter)
|
||||
{
|
||||
const LLUUID& item_id = (*item_iter);
|
||||
if(!highlight_offered_item(item_id))
|
||||
if(!highlight_offered_object(item_id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -753,6 +753,18 @@ public:
|
|||
const std::string& from_name) :
|
||||
LLInventoryFetchItemsObserver(object_id),
|
||||
mFromName(from_name) {}
|
||||
/*virtual*/ void startFetch()
|
||||
{
|
||||
for (uuid_vec_t::const_iterator it = mIDs.begin(); it < mIDs.end(); ++it)
|
||||
{
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
|
||||
if (cat)
|
||||
{
|
||||
mComplete.push_back((*it));
|
||||
}
|
||||
}
|
||||
LLInventoryFetchItemsObserver::startFetch();
|
||||
}
|
||||
/*virtual*/ void done()
|
||||
{
|
||||
open_inventory_offer(mComplete, mFromName);
|
||||
|
|
@ -1065,111 +1077,119 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
|
|||
}
|
||||
}
|
||||
|
||||
void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
|
||||
void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_name)
|
||||
{
|
||||
for (uuid_vec_t::const_iterator item_iter = items.begin();
|
||||
item_iter != items.end();
|
||||
++item_iter)
|
||||
for (uuid_vec_t::const_iterator obj_iter = objects.begin();
|
||||
obj_iter != objects.end();
|
||||
++obj_iter)
|
||||
{
|
||||
const LLUUID& item_id = (*item_iter);
|
||||
if(!highlight_offered_item(item_id))
|
||||
const LLUUID& obj_id = (*obj_iter);
|
||||
if(!highlight_offered_object(obj_id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
llassert(item);
|
||||
if (!item) {
|
||||
const LLInventoryObject *obj = gInventory.getObject(obj_id);
|
||||
if (!obj)
|
||||
{
|
||||
llwarns << "Cannot find object [ itemID:" << obj_id << " ] to open." << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Special handling for various types.
|
||||
const LLAssetType::EType asset_type = item->getActualType();
|
||||
if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
|
||||
const LLAssetType::EType asset_type = obj->getActualType();
|
||||
|
||||
// Either an inventory item or a category.
|
||||
const LLInventoryItem* item = dynamic_cast<const LLInventoryItem*>(obj);
|
||||
if (item)
|
||||
{
|
||||
LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID() << LL_ENDL;
|
||||
// If we opened this ourselves, focus it
|
||||
const BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
|
||||
switch(asset_type)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Special handling for various types.
|
||||
if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
|
||||
{
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
{
|
||||
LLFloaterReg::showInstance("preview_notecard", LLSD(item_id), take_focus);
|
||||
break;
|
||||
}
|
||||
case LLAssetType::AT_LANDMARK:
|
||||
{
|
||||
LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
|
||||
if ("inventory_handler" == from_name)
|
||||
LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID() << LL_ENDL;
|
||||
// If we opened this ourselves, focus it
|
||||
const BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
|
||||
switch(asset_type)
|
||||
{
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
{
|
||||
//we have to filter inventory_handler messages to avoid notification displaying
|
||||
LLSideTray::getInstance()->showPanel("panel_places",
|
||||
LLSD().with("type", "landmark").with("id", item->getUUID()));
|
||||
LLFloaterReg::showInstance("preview_notecard", LLSD(obj_id), take_focus);
|
||||
break;
|
||||
}
|
||||
else if("group_offer" == from_name)
|
||||
case LLAssetType::AT_LANDMARK:
|
||||
{
|
||||
// "group_offer" is passed by LLOpenTaskGroupOffer
|
||||
// Notification about added landmark will be generated under the "from_name.empty()" called from LLOpenTaskOffer::done().
|
||||
LLSD args;
|
||||
args["type"] = "landmark";
|
||||
args["id"] = item_id;
|
||||
LLSideTray::getInstance()->showPanel("panel_places", args);
|
||||
LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
|
||||
if ("inventory_handler" == from_name)
|
||||
{
|
||||
//we have to filter inventory_handler messages to avoid notification displaying
|
||||
LLSideTray::getInstance()->showPanel("panel_places",
|
||||
LLSD().with("type", "landmark").with("id", item->getUUID()));
|
||||
}
|
||||
else if("group_offer" == from_name)
|
||||
{
|
||||
// "group_offer" is passed by LLOpenTaskGroupOffer
|
||||
// Notification about added landmark will be generated under the "from_name.empty()" called from LLOpenTaskOffer::done().
|
||||
LLSD args;
|
||||
args["type"] = "landmark";
|
||||
args["id"] = obj_id;
|
||||
LLSideTray::getInstance()->showPanel("panel_places", args);
|
||||
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
else if(from_name.empty())
|
||||
{
|
||||
// we receive a message from LLOpenTaskOffer, it mean that new landmark has been added.
|
||||
LLSD args;
|
||||
args["LANDMARK_NAME"] = item->getName();
|
||||
args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
|
||||
LLNotificationsUtil::add("LandmarkCreated", args);
|
||||
}
|
||||
}
|
||||
else if(from_name.empty())
|
||||
break;
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
{
|
||||
// we receive a message from LLOpenTaskOffer, it mean that new landmark has been added.
|
||||
LLSD args;
|
||||
args["LANDMARK_NAME"] = item->getName();
|
||||
args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown");
|
||||
LLNotificationsUtil::add("LandmarkCreated", args);
|
||||
LLFloaterReg::showInstance("preview_texture", LLSD(obj_id), take_focus);
|
||||
break;
|
||||
}
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
LLFloaterReg::showInstance("preview_anim", LLSD(obj_id), take_focus);
|
||||
break;
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
LLFloaterReg::showInstance("preview_script", LLSD(obj_id), take_focus);
|
||||
break;
|
||||
case LLAssetType::AT_SOUND:
|
||||
LLFloaterReg::showInstance("preview_sound", LLSD(obj_id), take_focus);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
{
|
||||
LLFloaterReg::showInstance("preview_texture", LLSD(item_id), take_focus);
|
||||
break;
|
||||
}
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
LLFloaterReg::showInstance("preview_anim", LLSD(item_id), take_focus);
|
||||
break;
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
LLFloaterReg::showInstance("preview_script", LLSD(item_id), take_focus);
|
||||
break;
|
||||
case LLAssetType::AT_SOUND:
|
||||
LLFloaterReg::showInstance("preview_sound", LLSD(item_id), take_focus);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Highlight item if it's not in the trash, lost+found, or COF
|
||||
const BOOL auto_open = gSavedSettings.getBOOL("ShowInInventory") &&
|
||||
const BOOL auto_open =
|
||||
gSavedSettings.getBOOL("ShowInInventory") &&
|
||||
(asset_type != LLAssetType::AT_CALLINGCARD) &&
|
||||
(item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
|
||||
!(item && item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
|
||||
!from_name.empty();
|
||||
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
|
||||
if(active_panel)
|
||||
{
|
||||
LL_DEBUGS("Messaging") << "Highlighting" << item_id << LL_ENDL;
|
||||
LL_DEBUGS("Messaging") << "Highlighting" << obj_id << LL_ENDL;
|
||||
LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
|
||||
active_panel->setSelection(item_id, TAKE_FOCUS_NO);
|
||||
active_panel->setSelection(obj_id, TAKE_FOCUS_NO);
|
||||
gFocusMgr.setKeyboardFocus(focus_ctrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool highlight_offered_item(const LLUUID& item_id)
|
||||
bool highlight_offered_object(const LLUUID& obj_id)
|
||||
{
|
||||
LLInventoryItem* item = gInventory.getItem(item_id);
|
||||
if(!item)
|
||||
const LLInventoryObject* obj = gInventory.getObject(obj_id);
|
||||
if(!obj)
|
||||
{
|
||||
LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
|
||||
LL_WARNS("Messaging") << "Unable to show inventory item: " << obj_id << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1178,7 +1198,7 @@ bool highlight_offered_item(const LLUUID& item_id)
|
|||
// notification (e.g. trash, cof, lost-and-found).
|
||||
if(!gAgent.getAFK())
|
||||
{
|
||||
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
|
||||
const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(obj_id);
|
||||
if (parent)
|
||||
{
|
||||
const LLFolderType::EType parent_type = parent->getPreferredType();
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
|
|||
// Returns true if item is not in certain "quiet" folder which don't need UI
|
||||
// notification (e.g. trash, cof, lost-and-found) and agent is not AFK, false otherwise.
|
||||
// Returns false if item is not found.
|
||||
bool highlight_offered_item(const LLUUID& item_id);
|
||||
bool highlight_offered_object(const LLUUID& obj_id);
|
||||
|
||||
void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder_uuid);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue