summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llagent.cpp14
-rw-r--r--indra/newview/llagent.h7
-rw-r--r--indra/newview/llavataractions.cpp5
-rw-r--r--indra/newview/lldeferredsounds.cpp2
-rw-r--r--indra/newview/lldeferredsounds.h3
-rw-r--r--indra/newview/lldrawpoolalpha.cpp2
-rw-r--r--indra/newview/llfloaterimcontainer.cpp10
-rw-r--r--indra/newview/llfloaterimcontainer.h1
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp8
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp4
-rw-r--r--indra/newview/llfolderviewmodelinventory.cpp2
-rw-r--r--indra/newview/llimview.cpp15
-rw-r--r--indra/newview/llinventorybridge.cpp342
-rw-r--r--indra/newview/llinventoryfilter.cpp94
-rw-r--r--indra/newview/llinventoryfilter.h8
-rw-r--r--indra/newview/llinventoryfunctions.cpp14
-rw-r--r--indra/newview/llinventorygallery.cpp238
-rw-r--r--indra/newview/llinventorypanel.cpp4
-rw-r--r--indra/newview/llpanelcontents.cpp41
-rw-r--r--indra/newview/llpanelcontents.h10
-rw-r--r--indra/newview/llpanelmaininventory.cpp57
-rw-r--r--indra/newview/llpanelmaininventory.h10
-rw-r--r--indra/newview/llpanelobjectinventory.cpp520
-rw-r--r--indra/newview/llpanelobjectinventory.h2
-rw-r--r--indra/newview/llsettingspicker.cpp8
-rw-r--r--indra/newview/llsidepanelinventory.cpp2
-rw-r--r--indra/newview/llspatialpartition.cpp4
-rw-r--r--indra/newview/llspatialpartition.h2
-rw-r--r--indra/newview/llviewermenu.cpp2
-rw-r--r--indra/newview/llviewerobjectlist.h11
-rwxr-xr-xindra/newview/llviewerregion.cpp5
-rw-r--r--indra/newview/llviewertexteditor.cpp2
-rw-r--r--indra/newview/llviewertexture.cpp19
-rw-r--r--indra/newview/llvoavatar.cpp18
-rw-r--r--indra/newview/llvograss.cpp2
-rw-r--r--indra/newview/llvoiceclient.cpp2
-rw-r--r--indra/newview/llvoicewebrtc.cpp48
-rw-r--r--indra/newview/llvoicewebrtc.h5
-rw-r--r--indra/newview/llvopartgroup.cpp2
-rw-r--r--indra/newview/llvovolume.cpp15
-rw-r--r--indra/newview/llvovolume.h1
-rwxr-xr-xindra/newview/llworldmapview.cpp69
-rw-r--r--indra/newview/llworldmapview.h1
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml20
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml18
46 files changed, 910 insertions, 761 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 7d5b6fa2a4..106fe81682 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -33,6 +33,7 @@ include(NVAPI)
include(OPENAL)
include(OpenGL)
include(OpenSSL)
+include(OpenXR)
include(PNG)
include(TemplateCheck)
include(TinyEXR)
@@ -1923,6 +1924,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
ll::lualibs
ll::ndof
ll::tracy
+ ll::openxr
)
if( TARGET ll::intel_memops )
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index c4336758ac..7c37cc1c00 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -355,6 +355,20 @@ bool LLAgent::isMicrophoneOn(const LLSD& sdname)
return LLVoiceClient::getInstance()->getUserPTTState();
}
+//static
+void LLAgent::toggleHearMediaSoundFromAvatar()
+{
+ const S32 mediaSoundsEarLocation = gSavedSettings.getS32("MediaSoundsEarLocation");
+ gSavedSettings.setS32("MediaSoundsEarLocation", !mediaSoundsEarLocation);
+}
+
+//static
+void LLAgent::toggleHearVoiceFromAvatar()
+{
+ const S32 voiceEarLocation = gSavedSettings.getS32("VoiceEarLocation");
+ gSavedSettings.setS32("VoiceEarLocation", !voiceEarLocation);
+}
+
// ************************************************************
// Enabled this definition to compile a 'hacked' viewer that
// locally believes the end user has godlike powers.
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 8f892025c9..7c7f7aa91d 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -375,6 +375,13 @@ private:
bool mVoiceConnected;
//--------------------------------------------------------------------
+ // Sound
+ //--------------------------------------------------------------------
+public:
+ static void toggleHearMediaSoundFromAvatar();
+ static void toggleHearVoiceFromAvatar();
+
+ //--------------------------------------------------------------------
// Chat
//--------------------------------------------------------------------
public:
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 038030a1f6..6f6b89ea81 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -242,10 +242,7 @@ static void on_avatar_name_cache_start_call(const LLUUID& agent_id,
{
std::string name = av_name.getDisplayName();
LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, agent_id, LLSD());
- if (session_id != LLUUID::null)
- {
- gIMMgr->startCall(session_id);
- }
+ gIMMgr->autoStartCallOnStartup(session_id);
make_ui_sound("UISndStartIM");
}
diff --git a/indra/newview/lldeferredsounds.cpp b/indra/newview/lldeferredsounds.cpp
index 8b7c399af1..44f51545dc 100644
--- a/indra/newview/lldeferredsounds.cpp
+++ b/indra/newview/lldeferredsounds.cpp
@@ -29,8 +29,6 @@
#include "lldeferredsounds.h"
-#include "llaudioengine.h"
-
void LLDeferredSounds::deferSound(SoundData& sound)
{
soundVector.push_back(sound);
diff --git a/indra/newview/lldeferredsounds.h b/indra/newview/lldeferredsounds.h
index e586226184..9f3425fc66 100644
--- a/indra/newview/lldeferredsounds.h
+++ b/indra/newview/lldeferredsounds.h
@@ -28,8 +28,7 @@
#define LL_LLDEFERREDSOUNDS_H
#include "llsingleton.h"
-
-struct SoundData;
+#include "llaudioengine.h"
class LLDeferredSounds : public LLSingleton<LLDeferredSounds>
{
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index b4d14e22f3..87b6ce6cb3 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -757,7 +757,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, bool depth_only, bool rigged)
if (current_shader)
{
- current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, spec_color.mV[0], spec_color.mV[1], spec_color.mV[2], spec_color.mV[3]);
+ current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, spec_color.mV[VRED], spec_color.mV[VGREEN], spec_color.mV[VBLUE], spec_color.mV[VALPHA]);
current_shader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, env_intensity);
current_shader->uniform1f(LLShaderMgr::EMISSIVE_BRIGHTNESS, brightness);
}
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index f68980b23c..1e2d790cfc 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -306,6 +306,9 @@ bool LLFloaterIMContainer::postBuild()
mParticipantRefreshTimer.setTimerExpirySec(0);
mParticipantRefreshTimer.start();
+ mGeneralTitleInUse = true; // avoid reseting strings on idle
+ setTitle(mGeneralTitle);
+
return true;
}
@@ -521,7 +524,12 @@ void LLFloaterIMContainer::idleUpdate()
// Update floater's title as required by the currently selected session or use the default title
LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(current_session->getUUID());
- setTitle(conversation_floaterp && conversation_floaterp->needsTitleOverwrite() ? conversation_floaterp->getTitle() : mGeneralTitle);
+ bool needs_override = conversation_floaterp && conversation_floaterp->needsTitleOverwrite();
+ if (mGeneralTitleInUse == needs_override)
+ {
+ mGeneralTitleInUse = !needs_override;
+ setTitle(needs_override ? conversation_floaterp->getTitle() : mGeneralTitle);
+ }
}
mParticipantRefreshTimer.setTimerExpirySec(1.0f);
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index d1cfd3442c..e5486e67da 100644
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -234,6 +234,7 @@ private:
conversations_items_deque mConversationEventQueue;
LLTimer mParticipantRefreshTimer;
+ bool mGeneralTitleInUse = true;
};
#endif // LL_LLFLOATERIMCONTAINER_H
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 4f6f96e37e..b2f2984c65 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -450,7 +450,8 @@ void LLFloaterIMSessionTab::enableDisableCallBtn()
else
{
// We allow to start call from this state only
- if (mSession->mVoiceChannel->getState() == LLVoiceChannel::STATE_NO_CHANNEL_INFO &&
+ if (mSession->mVoiceChannel &&
+ !mSession->mVoiceChannel->callStarted() &&
LLVoiceClient::instanceExists())
{
LLVoiceClient* client = LLVoiceClient::getInstance();
@@ -494,10 +495,7 @@ void LLFloaterIMSessionTab::onCallButtonClicked()
}
else
{
- LLVoiceChannel::EState channel_state = mSession && mSession->mVoiceChannel ?
- mSession->mVoiceChannel->getState() : LLVoiceChannel::STATE_NO_CHANNEL_INFO;
- // We allow to start call from this state only
- if (channel_state == LLVoiceChannel::STATE_NO_CHANNEL_INFO)
+ if (mSession->mVoiceChannel && !mSession->mVoiceChannel->callStarted())
{
gIMMgr->startCall(mSessionID);
}
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index bd6778c3f9..dda7266220 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -1773,8 +1773,8 @@ void LLFloaterWorldMap::onCommitSearchResult()
}
LLStringUtil::toLower(sim_name);
- std::map<U64, LLSimInfo*>::const_iterator it;
- for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
+ LLWorldMap::sim_info_map_t::const_iterator end = LLWorldMap::instance().getRegionMap().end();
+ for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin(); it != end; ++it)
{
LLSimInfo* info = it->second;
diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
index 734f20830d..c668d414d3 100644
--- a/indra/newview/llfolderviewmodelinventory.cpp
+++ b/indra/newview/llfolderviewmodelinventory.cpp
@@ -234,7 +234,7 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite
return continue_filtering;
}
-bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
+bool LLFolderViewModelItemInventory::filter(LLFolderViewFilter& filter)
{
const S32 filter_generation = filter.getCurrentGeneration();
const S32 must_pass_generation = filter.getFirstRequiredGeneration();
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 136b59f3a6..06cf9919b6 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -390,11 +390,11 @@ void notify_of_message(const LLSD& msg, bool is_dnd_msg)
}
else
{
- LLAvatarNameCache::get(participant_id, boost::bind(&on_avatar_name_cache_toast, _1, _2, msg));
+ LLAvatarNameCache::get(participant_id, boost::bind(&on_avatar_name_cache_toast, _1, _2, msg));
+ }
+ }
}
}
-}
- }
if (store_dnd_message)
{
// If in DND mode, allow notification to be stored so upon DND exit
@@ -4178,11 +4178,16 @@ public:
}
if (input["body"]["info"].has("voice_channel_info"))
{
+ // new voice channel info incoming, update and re-activate call
+ // if currently in a call.
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
if (session)
{
- session->initVoiceChannel(input["body"]["info"]["voice_channel_info"]);
- session->mVoiceChannel->activate();
+ if (session->mVoiceChannel && session->mVoiceChannel->callStarted())
+ {
+ session->initVoiceChannel(input["body"]["info"]["voice_channel_info"]);
+ session->mVoiceChannel->activate();
+ }
}
}
}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index c86492f005..2e8b1b94fe 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1897,20 +1897,24 @@ void LLItemBridge::selectItem()
}
}
+// virtual
void LLItemBridge::restoreItem()
{
- LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
- if(item)
+ if (LLViewerInventoryItem* item = getItem())
{
- LLInventoryModel* model = getInventoryModel();
- bool is_snapshot = (item->getInventoryType() == LLInventoryType::IT_SNAPSHOT);
+ bool is_snapshot = item->getInventoryType() == LLInventoryType::IT_SNAPSHOT;
+ LLFolderType::EType preferred_type = is_snapshot ?
+ LLFolderType::FT_SNAPSHOT_CATEGORY :
+ LLFolderType::assetTypeToFolderType(item->getType());
- const LLUUID new_parent = model->findCategoryUUIDForType(is_snapshot? LLFolderType::FT_SNAPSHOT_CATEGORY : LLFolderType::assetTypeToFolderType(item->getType()));
- // do not restamp on restore.
+ LLInventoryModel* model = getInventoryModel();
+ LLUUID new_parent = model->findCategoryUUIDForType(preferred_type);
+ // Do not restamp on restore.
LLInvFVBridge::changeItemParent(model, item, new_parent, false);
}
}
+// virtual
void LLItemBridge::restoreToWorld()
{
//Similar functionality to the drag and drop rez logic
@@ -1931,26 +1935,27 @@ void LLItemBridge::restoreToWorld()
//remove local inventory copy, sim will deal with permissions and removing the item
//from the actual inventory if its a no-copy etc
- if(!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
{
remove_from_inventory = true;
}
// Check if it's in the trash. (again similar to the normal rez logic)
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
+ if (gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
{
remove_from_inventory = true;
}
}
- if(remove_from_inventory)
+ if (remove_from_inventory)
{
gInventory.deleteObject(itemp->getUUID());
gInventory.notifyObservers();
}
}
+// virtual
void LLItemBridge::gotoItem()
{
LLInventoryObject *obj = getInventoryObject();
@@ -1960,39 +1965,43 @@ void LLItemBridge::gotoItem()
}
}
+// virtual
LLUIImagePtr LLItemBridge::getIcon() const
{
- LLInventoryObject *obj = getInventoryObject();
- if (obj)
+ if (LLInventoryObject* obj = getInventoryObject())
{
- return LLInventoryIcon::getIcon(obj->getType(),
- LLInventoryType::IT_NONE,
- mIsLink);
+ return LLInventoryIcon::getIcon(obj->getType(), LLInventoryType::IT_NONE, mIsLink);
}
return LLInventoryIcon::getIcon(LLInventoryType::ICONNAME_OBJECT);
}
+// virtual
LLUIImagePtr LLItemBridge::getIconOverlay() const
{
if (getItem() && getItem()->getIsLinkType())
{
return LLUI::getUIImage("Inv_Link");
}
+
return NULL;
}
+// virtual
PermissionMask LLItemBridge::getPermissionMask() const
{
- LLViewerInventoryItem* item = getItem();
- PermissionMask perm_mask = 0;
- if (item) perm_mask = item->getPermissionMask();
- return perm_mask;
+ if (LLViewerInventoryItem* item = getItem())
+ {
+ return item->getPermissionMask();
+ }
+
+ return 0;
}
+// virtual
void LLItemBridge::buildDisplayName() const
{
- if(getItem())
+ if (getItem())
{
mDisplayName.assign(getItem()->getName());
}
@@ -2005,14 +2014,15 @@ void LLItemBridge::buildDisplayName() const
mSearchableName.append(getLabelSuffix());
LLStringUtil::toUpper(mSearchableName);
- //Name set, so trigger a sort
+ // Name set, so trigger a sort
LLInventorySort sorter = static_cast<LLFolderViewModelInventory&>(mRootViewModel).getSorter();
- if(mParent && !sorter.isByDate())
+ if (mParent && !sorter.isByDate())
{
mParent->requestSort();
}
}
+// virtual
LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
{
U8 font = LLFontGL::NORMAL;
@@ -2023,7 +2033,7 @@ LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
// LL_INFOS() << "BOLD" << LL_ENDL;
font |= LLFontGL::BOLD;
}
- else if(item && item->getIsLinkType())
+ else if (item && item->getIsLinkType())
{
font |= LLFontGL::ITALIC;
}
@@ -2031,6 +2041,7 @@ LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
return (LLFontGL::StyleFlags)font;
}
+// virtual
std::string LLItemBridge::getLabelSuffix() const
{
// String table is loaded before login screen and inventory items are
@@ -2040,19 +2051,19 @@ std::string LLItemBridge::getLabelSuffix() const
static std::string NO_XFER = LLTrans::getString("no_transfer_lbl");
static std::string LINK = LLTrans::getString("link");
static std::string BROKEN_LINK = LLTrans::getString("broken_link");
+
std::string suffix;
- LLInventoryItem* item = getItem();
- if(item)
+ if (LLInventoryItem* item = getItem())
{
// Any type can have the link suffix...
- bool broken_link = LLAssetType::lookupIsLinkType(item->getType());
- if (broken_link) return BROKEN_LINK;
+ if (LLAssetType::lookupIsLinkType(item->getType()))
+ return BROKEN_LINK;
- bool link = item->getIsLinkType();
- if (link) return LINK;
+ if (item->getIsLinkType())
+ return LINK;
// ...but it's a bit confusing to put nocopy/nomod/etc suffixes on calling cards.
- if(LLAssetType::AT_CALLINGCARD != item->getType()
+ if (LLAssetType::AT_CALLINGCARD != item->getType()
&& item->getPermissions().getOwner() == gAgent.getID())
{
bool copy = item->getPermissions().allowCopyBy(gAgent.getID());
@@ -2067,8 +2078,7 @@ std::string LLItemBridge::getLabelSuffix() const
suffix += suffix.empty() ? " " : ",";
suffix += NO_MOD;
}
- bool xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER,
- gAgent.getID());
+ bool xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID());
if (!xfer)
{
suffix += suffix.empty() ? " " : ",";
@@ -2076,24 +2086,25 @@ std::string LLItemBridge::getLabelSuffix() const
}
}
}
+
return suffix;
}
+// virtual
time_t LLItemBridge::getCreationDate() const
{
- LLViewerInventoryItem* item = getItem();
- if (item)
+ if (LLViewerInventoryItem* item = getItem())
{
return item->getCreationDate();
}
+
return 0;
}
-
+// virtual
bool LLItemBridge::isItemRenameable() const
{
- LLViewerInventoryItem* item = getItem();
- if(item)
+ if (LLViewerInventoryItem* item = getItem())
{
// (For now) Don't allow calling card rename since that may confuse users as to
// what the calling card points to.
@@ -2112,50 +2123,62 @@ bool LLItemBridge::isItemRenameable() const
return false;
}
- return (item->getPermissions().allowModifyBy(gAgent.getID()));
+ return item->getPermissions().allowModifyBy(gAgent.getID());
}
+
return false;
}
+// virtual
bool LLItemBridge::renameItem(const std::string& new_name)
{
- if(!isItemRenameable())
+ if (!isItemRenameable())
return false;
+
LLPreview::dirty(mUUID);
LLInventoryModel* model = getInventoryModel();
- if(!model)
+ if (!model)
return false;
+
LLViewerInventoryItem* item = getItem();
- if(item && (item->getName() != new_name))
+ if (item && (item->getName() != new_name))
{
LLSD updates;
updates["name"] = new_name;
update_inventory_item(item->getUUID(),updates, NULL);
}
- // return false because we either notified observers (& therefore
- // rebuilt) or we didn't update.
+
+ // return false because we either notified observers
+ // (& therefore rebuilt) or we didn't update.
return false;
}
+// virtual
bool LLItemBridge::removeItem()
{
- if(!isItemRemovable())
+ if (!isItemRemovable())
{
return false;
}
// move it to the trash
LLInventoryModel* model = getInventoryModel();
- if(!model) return false;
+ if (!model)
+ return false;
+
const LLUUID& trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
LLViewerInventoryItem* item = getItem();
- if (!item) return false;
+ if (!item)
+ return false;
+
if (item->getType() != LLAssetType::AT_LSL_TEXT)
{
LLPreview::hide(mUUID, true);
}
+
// Already in trash
- if (model->isObjectDescendentOf(mUUID, trash_id)) return false;
+ if (model->isObjectDescendentOf(mUUID, trash_id))
+ return false;
LLNotification::Params params("ConfirmItemDeleteHasLinks");
params.functor.function(boost::bind(&LLItemBridge::confirmRemoveItem, this, _1, _2));
@@ -2187,26 +2210,31 @@ bool LLItemBridge::removeItem()
bool LLItemBridge::confirmRemoveItem(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (option != 0) return false;
+ if (option != 0)
+ return false;
LLInventoryModel* model = getInventoryModel();
- if (!model) return false;
+ if (!model)
+ return false;
LLViewerInventoryItem* item = getItem();
- if (!item) return false;
+ if (!item)
+ return false;
const LLUUID& trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
// if item is not already in trash
- if(item && !model->isObjectDescendentOf(mUUID, trash_id))
+ if (item && !model->isObjectDescendentOf(mUUID, trash_id))
{
// move to trash, and restamp
LLInvFVBridge::changeItemParent(model, item, trash_id, true);
// delete was successful
return true;
}
+
return false;
}
+// virtual
bool LLItemBridge::isItemCopyable(bool can_copy_as_link) const
{
LLViewerInventoryItem* item = getItem();
@@ -2214,6 +2242,7 @@ bool LLItemBridge::isItemCopyable(bool can_copy_as_link) const
{
return false;
}
+
// Can't copy worn objects.
// Worn objects are tied to their inworld conterparts
// Copy of modified worn object will return object with obsolete asset and inventory
@@ -2230,37 +2259,36 @@ bool LLItemBridge::isItemCopyable(bool can_copy_as_link) const
LLViewerInventoryItem* LLItemBridge::getItem() const
{
- LLViewerInventoryItem* item = NULL;
- LLInventoryModel* model = getInventoryModel();
- if(model)
+ if (LLInventoryModel* model = getInventoryModel())
{
- item = (LLViewerInventoryItem*)model->getItem(mUUID);
+ return model->getItem(mUUID);
}
- return item;
+
+ return NULL;
}
+// virtual
const LLUUID& LLItemBridge::getThumbnailUUID() const
{
- LLViewerInventoryItem* item = NULL;
- LLInventoryModel* model = getInventoryModel();
- if(model)
- {
- item = (LLViewerInventoryItem*)model->getItem(mUUID);
- }
- if (item)
+ if (LLInventoryModel* model = getInventoryModel())
{
- return item->getThumbnailUUID();
+ if (LLViewerInventoryItem* item = model->getItem(mUUID))
+ {
+ return item->getThumbnailUUID();
+ }
}
+
return LLUUID::null;
}
+// virtual
bool LLItemBridge::isItemPermissive() const
{
- LLViewerInventoryItem* item = getItem();
- if(item)
+ if (LLViewerInventoryItem* item = getItem())
{
return item->getIsFullPerm();
}
+
return false;
}
@@ -2583,16 +2611,22 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
LLInventoryModel* model = getInventoryModel();
- if (!inv_cat) return false; // shouldn't happen, but in case item is incorrectly parented in which case inv_cat will be NULL
- if (!model) return false;
- if (!isAgentAvatarValid()) return false;
- if (!isAgentInventory()) return false; // cannot drag categories into library
+ if (!inv_cat) // shouldn't happen, but in case item is incorrectly parented in which case inv_cat will be NULL
+ return false;
+ if (!model)
+ return false;
+ if (!isAgentAvatarValid())
+ return false;
+ if (!isAgentInventory())
+ return false; // cannot drag categories into library
LLInventoryPanel* destination_panel = mInventoryPanel.get();
- if (!destination_panel) return false;
+ if (!destination_panel)
+ return false;
LLInventoryFilter* filter = getInventoryFilter();
- if (!filter) return false;
+ if (!filter)
+ return false;
const LLUUID &cat_id = inv_cat->getUUID();
const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
@@ -2689,7 +2723,7 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
is_movable = false;
}
}
- if(is_movable && move_is_into_current_outfit && is_link)
+ if (is_movable && move_is_into_current_outfit && is_link)
{
is_movable = false;
}
@@ -2717,7 +2751,7 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
for (S32 i=0; i < descendent_categories.size(); ++i)
{
LLInventoryCategory* category = descendent_categories[i];
- if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
+ if (LLFolderType::lookupIsProtectedType(category->getPreferredType()))
{
// Can't move "special folders" (e.g. Textures Folder).
is_movable = false;
@@ -2749,9 +2783,8 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
if (is_movable && move_is_into_trash)
{
- for (S32 i=0; i < descendent_items.size(); ++i)
+ for (LLViewerInventoryItem* item : descendent_items)
{
- LLInventoryItem* item = descendent_items[i];
if (get_is_item_worn(item->getUUID()))
{
is_movable = false;
@@ -2761,10 +2794,8 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
if (is_movable && move_is_into_landmarks)
{
- for (S32 i=0; i < descendent_items.size(); ++i)
+ for (LLViewerInventoryItem* item : descendent_items)
{
- LLViewerInventoryItem* item = descendent_items[i];
-
// Don't move anything except landmarks and categories into Landmarks folder.
// We use getType() instead of getActua;Type() to allow links to landmarks and folders.
if (LLAssetType::AT_LANDMARK != item->getType() && LLAssetType::AT_CATEGORY != item->getType())
@@ -3055,7 +3086,7 @@ bool move_inv_category_world_to_agent(const LLUUID& object_id,
// permissions.
// content category has same ID as object itself
LLViewerObject* object = gObjectList.findObject(object_id);
- if(!object)
+ if (!object)
{
LL_INFOS() << "Object not found for drop." << LL_ENDL;
return false;
@@ -3083,11 +3114,9 @@ bool move_inv_category_world_to_agent(const LLUUID& object_id,
// coming from a task. Need to figure out if the person can
// move/copy this item.
- LLInventoryObject::object_list_t::iterator it = inventory_objects.begin();
- LLInventoryObject::object_list_t::iterator end = inventory_objects.end();
- for ( ; it != end; ++it)
+ for (LLPointer<LLInventoryObject> obj : inventory_objects)
{
- LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(it->get());
+ LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(obj.get());
if (!item)
{
LL_WARNS() << "Invalid inventory item for drop" << LL_ENDL;
@@ -3097,13 +3126,13 @@ bool move_inv_category_world_to_agent(const LLUUID& object_id,
// coming from a task. Need to figure out if the person can
// move/copy this item.
LLPermissions perm(item->getPermissions());
- if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+ if ((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
&& perm.allowTransferTo(gAgent.getID())))
// || gAgent.isGodlike())
{
accept = true;
}
- else if(object->permYouOwner())
+ else if (object->permYouOwner())
{
// If the object cannot be copied, but the object the
// inventory is owned by the agent, then the item can be
@@ -3123,22 +3152,21 @@ bool move_inv_category_world_to_agent(const LLUUID& object_id,
}
}
- if(drop && accept)
+ if (drop && accept)
{
- it = inventory_objects.begin();
std::shared_ptr<LLMoveInv> move_inv(new LLMoveInv);
move_inv->mObjectID = object_id;
move_inv->mCategoryID = category_id;
move_inv->mCallback = callback;
move_inv->mUserData = user_data;
- for ( ; it != end; ++it)
+ for (LLPointer<LLInventoryObject> obj : inventory_objects)
{
- two_uuids_t two(category_id, (*it)->getUUID());
+ two_uuids_t two(category_id, obj->getUUID());
move_inv->mMoveList.push_back(two);
}
- if(is_move)
+ if (is_move)
{
// Callback called from within here.
warn_move_inventory(object, move_inv);
@@ -3156,13 +3184,13 @@ bool move_inv_category_world_to_agent(const LLUUID& object_id,
void LLRightClickInventoryFetchDescendentsObserver::execute(bool clear_observer)
{
// Bail out immediately if no descendents
- if( mComplete.empty() )
+ if (mComplete.empty())
{
LL_WARNS() << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << LL_ENDL;
if (clear_observer)
{
- gInventory.removeObserver(this);
- delete this;
+ gInventory.removeObserver(this);
+ delete this;
}
return;
}
@@ -3186,13 +3214,13 @@ void LLRightClickInventoryFetchDescendentsObserver::execute(bool clear_observer)
gInventory.getDirectDescendentsOf(*current_folder, cat_array, item_array);
size_t item_count(0);
- if( item_array )
+ if (item_array)
{
item_count = item_array->size();
}
size_t cat_count(0);
- if( cat_array )
+ if (cat_array)
{
cat_count = cat_array->size();
}
@@ -3291,20 +3319,16 @@ protected:
};
-
void LLInventoryCopyAndWearObserver::changed(U32 mask)
{
- if((mask & (LLInventoryObserver::ADD)) != 0)
+ if ((mask & (LLInventoryObserver::ADD)) != 0)
{
if (!mFolderAdded)
{
const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
- std::set<LLUUID>::const_iterator id_it = changed_items.begin();
- std::set<LLUUID>::const_iterator id_end = changed_items.end();
- for (;id_it != id_end; ++id_it)
+ for (const LLUUID& item_id : changed_items)
{
- if ((*id_it) == mCatID)
+ if (item_id == mCatID)
{
mFolderAdded = true;
break;
@@ -3322,8 +3346,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
}
else
{
- if (category->getDescendentCount() ==
- mContentsCount)
+ if (category->getDescendentCount() == mContentsCount)
{
gInventory.removeObserver(this);
LLAppearanceMgr::instance().wearInventoryCategory(category, false, !mReplace);
@@ -3335,8 +3358,6 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
}
}
-
-
void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("open" == action)
@@ -3429,19 +3450,19 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
LLMarketplaceValidator::getInstance()->validateMarketplaceListings(
version_folder_id,
[this](bool result)
- {
- // todo: might need to ensure bridge/mUUID exists or this will cause crashes
- if (!result)
{
- LLSD subs;
- subs["[ERROR_CODE]"] = mMessage;
- LLNotificationsUtil::add("MerchantListingFailed", subs);
- }
- else
- {
- LLMarketplaceData::instance().activateListing(mUUID, true);
- }
- },
+ // todo: might need to ensure bridge/mUUID exists or this will cause crashes
+ if (!result)
+ {
+ LLSD subs;
+ subs["[ERROR_CODE]"] = mMessage;
+ LLNotificationsUtil::add("MerchantListingFailed", subs);
+ }
+ else
+ {
+ LLMarketplaceData::instance().activateListing(mUUID, true);
+ }
+ },
boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3)
);
}
@@ -3456,19 +3477,19 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
LLMarketplaceValidator::getInstance()->validateMarketplaceListings(
mUUID,
[this](bool result)
- {
- if (!result)
{
- LLSD subs;
- subs["[ERROR_CODE]"] = mMessage;
- LLNotificationsUtil::add("MerchantFolderActivationFailed", subs);
- }
- else
- {
- LLInventoryCategory* category = gInventory.getCategory(mUUID);
- LLMarketplaceData::instance().setVersionFolder(category->getParentUUID(), mUUID);
- }
- },
+ if (!result)
+ {
+ LLSD subs;
+ subs["[ERROR_CODE]"] = mMessage;
+ LLNotificationsUtil::add("MerchantFolderActivationFailed", subs);
+ }
+ else
+ {
+ LLInventoryCategory* category = gInventory.getCategory(mUUID);
+ LLMarketplaceData::instance().setVersionFolder(category->getParentUUID(), mUUID);
+ }
+ },
boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3),
false,
2);
@@ -3500,35 +3521,35 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
LLMarketplaceValidator::getInstance()->validateMarketplaceListings(
mUUID,
[this](bool result)
- {
- if (!result)
{
- mMessage = "";
-
- LLMarketplaceValidator::getInstance()->validateMarketplaceListings(
- mUUID,
- [this](bool result)
+ if (!result)
{
- if (result)
- {
- LLNotificationsUtil::add("MerchantForceValidateListing");
- LLMarketplaceData::instance().createListing(mUUID);
- }
- else
+ mMessage = "";
+
+ LLMarketplaceValidator::getInstance()->validateMarketplaceListings(
+ mUUID,
+ [this](bool result)
{
- LLSD subs;
- subs["[ERROR_CODE]"] = mMessage;
- LLNotificationsUtil::add("MerchantListingFailed", subs);
- }
- },
- boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3),
- true);
- }
- else
- {
- LLMarketplaceData::instance().createListing(mUUID);
- }
- },
+ if (result)
+ {
+ LLNotificationsUtil::add("MerchantForceValidateListing");
+ LLMarketplaceData::instance().createListing(mUUID);
+ }
+ else
+ {
+ LLSD subs;
+ subs["[ERROR_CODE]"] = mMessage;
+ LLNotificationsUtil::add("MerchantListingFailed", subs);
+ }
+ },
+ boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3),
+ true);
+ }
+ else
+ {
+ LLMarketplaceData::instance().createListing(mUUID);
+ }
+ },
boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3),
false);
@@ -3607,7 +3628,7 @@ void LLFolderBridge::copyOutfitToClipboard()
gInventory.getDirectDescendentsOf(mUUID, cat_array, item_array);
size_t item_count(0);
- if( item_array )
+ if (item_array)
{
item_count = item_array->size();
}
@@ -3699,8 +3720,7 @@ void LLFolderBridge::restoreItem()
LLFolderType::EType LLFolderBridge::getPreferredType() const
{
LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
- LLViewerInventoryCategory* cat = getCategory();
- if(cat)
+ if (LLViewerInventoryCategory* cat = getCategory())
{
preferred_type = cat->getPreferredType();
}
@@ -3742,7 +3762,6 @@ LLUIImagePtr LLFolderBridge::getIconOverlay() const
bool LLFolderBridge::renameItem(const std::string& new_name)
{
-
LLScrollOnRenameObserver *observer = new LLScrollOnRenameObserver(mUUID, mRoot);
gInventory.addObserver(observer);
@@ -3755,7 +3774,7 @@ bool LLFolderBridge::renameItem(const std::string& new_name)
bool LLFolderBridge::removeItem()
{
- if(!isItemRemovable())
+ if (!isItemRemovable())
{
return false;
}
@@ -3771,7 +3790,6 @@ bool LLFolderBridge::removeItem()
return true;
}
-
bool LLFolderBridge::removeSystemFolder()
{
const LLViewerInventoryCategory *cat = getCategory();
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index e3d4645701..5c0905af3c 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -103,7 +103,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
}
std::string desc = listener->getSearchableCreatorName();
- switch(mSearchType)
+ switch (mSearchType)
{
case SEARCHTYPE_CREATOR:
desc = listener->getSearchableCreatorName();
@@ -129,7 +129,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
boost::char_separator<char> sep(" ");
tokenizer tokens(desc, sep);
- for (auto token_iter : tokens)
+ for (const auto& token_iter : tokens)
{
if (token_iter == mExactToken)
{
@@ -138,9 +138,9 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
}
}
}
- else if ((mFilterTokens.size() > 0) && (mSearchType == SEARCHTYPE_NAME))
+ else if (!mFilterTokens.empty() && mSearchType == SEARCHTYPE_NAME)
{
- for (auto token_iter : mFilterTokens)
+ for (const auto& token_iter : mFilterTokens)
{
if (desc.find(token_iter) == std::string::npos)
{
@@ -150,7 +150,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
}
else
{
- passed = (mFilterSubString.size() ? desc.find(mFilterSubString) != std::string::npos : true);
+ passed = checkAgainstFilterSubString(desc);
}
passed = passed && checkAgainstFilterType(listener);
@@ -166,7 +166,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
bool LLInventoryFilter::check(const LLInventoryItem* item)
{
- const bool passed_string = (mFilterSubString.size() ? item->getName().find(mFilterSubString) != std::string::npos : true);
+ const bool passed_string = checkAgainstFilterSubString(item->getName());
const bool passed_filtertype = checkAgainstFilterType(item);
const bool passed_permissions = checkAgainstPermissions(item);
@@ -295,9 +295,19 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
return true;
}
+bool LLInventoryFilter::checkAgainstFilterSubString(const std::string& desc) const
+{
+ if (mFilterSubString.empty())
+ return true;
+
+ size_t pos = desc.find(mFilterSubString);
+ return pos != std::string::npos;
+}
+
bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return false;
+ if (!listener)
+ return false;
LLInventoryType::EType object_type = listener->getInventoryType();
const LLUUID object_id = listener->getUUID();
@@ -338,7 +348,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
}
}
- if(filterTypes & FILTERTYPE_WORN)
+ if (filterTypes & FILTERTYPE_WORN)
{
if (!get_is_item_worn(object_id))
{
@@ -351,7 +361,8 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
// Pass if this item is the target UUID or if it links to the target UUID
if (filterTypes & FILTERTYPE_UUID)
{
- if (!object) return false;
+ if (!object)
+ return false;
if (object->getLinkedUUID() != mFilterOps.mFilterUUID)
return false;
@@ -363,7 +374,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
if (filterTypes & FILTERTYPE_DATE)
{
const U16 HOURS_TO_SECONDS = 3600;
- time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
+ time_t earliest = time_corrected() - (U64)mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
{
@@ -494,7 +505,8 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) cons
// Pass if this item is the target UUID or if it links to the target UUID
if (filterTypes & FILTERTYPE_UUID)
{
- if (!item) return false;
+ if (!item)
+ return false;
if (item->getLinkedUUID() != mFilterOps.mFilterUUID)
return false;
@@ -540,7 +552,8 @@ bool LLInventoryFilter::checkAgainstClipboard(const LLUUID& object_id) const
bool LLInventoryFilter::checkAgainstPermissions(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return false;
+ if (!listener)
+ return false;
PermissionMask perm = listener->getPermissionMask();
const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(listener);
@@ -556,7 +569,8 @@ bool LLInventoryFilter::checkAgainstPermissions(const LLFolderViewModelItemInven
bool LLInventoryFilter::checkAgainstPermissions(const LLInventoryItem* item) const
{
- if (!item) return false;
+ if (!item)
+ return false;
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
PermissionMask perm = new_item->getPermissionMask();
@@ -567,11 +581,13 @@ bool LLInventoryFilter::checkAgainstPermissions(const LLInventoryItem* item) con
bool LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return true;
+ if (!listener)
+ return true;
const LLUUID object_id = listener->getUUID();
const LLInventoryObject *object = gInventory.getObject(object_id);
- if (!object) return true;
+ if (!object)
+ return true;
const bool is_link = object->getIsLinkType();
if (is_link && (mFilterOps.mFilterLinks == FILTERLINK_EXCLUDE_LINKS))
@@ -584,7 +600,8 @@ bool LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewModelItemInven
bool LLInventoryFilter::checkAgainstFilterThumbnails(const LLUUID& object_id) const
{
const LLInventoryObject *object = gInventory.getObject(object_id);
- if (!object) return true;
+ if (!object)
+ return true;
const bool is_thumbnail = object->getThumbnailUUID().notNull();
if (is_thumbnail && (mFilterOps.mFilterThumbnails == FILTER_EXCLUDE_THUMBNAILS))
@@ -596,16 +613,20 @@ bool LLInventoryFilter::checkAgainstFilterThumbnails(const LLUUID& object_id) co
bool LLInventoryFilter::checkAgainstCreator(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return true;
+ if (!listener)
+ return true;
+
const bool is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
switch (mFilterOps.mFilterCreatorType)
{
case FILTERCREATOR_SELF:
- if(is_folder) return false;
- return (listener->getSearchableCreatorName() == mUsername);
+ if (is_folder)
+ return false;
+ return listener->getSearchableCreatorName() == mUsername;
case FILTERCREATOR_OTHERS:
- if(is_folder) return false;
- return (listener->getSearchableCreatorName() != mUsername);
+ if (is_folder)
+ return false;
+ return listener->getSearchableCreatorName() != mUsername;
case FILTERCREATOR_ALL:
default:
return true;
@@ -618,7 +639,8 @@ bool LLInventoryFilter::checkAgainstSearchVisibility(const LLFolderViewModelItem
const LLUUID object_id = listener->getUUID();
const LLInventoryObject *object = gInventory.getObject(object_id);
- if (!object) return true;
+ if (!object)
+ return true;
const bool is_link = object->getIsLinkType();
if (is_link && ((mFilterOps.mSearchVisibility & VISIBILITY_LINKS) == 0))
@@ -647,10 +669,8 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset(LLFolderViewModel
{
return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos;
}
- else
- {
- return std::string::npos;
- }
+
+ return std::string::npos;
}
bool LLInventoryFilter::isDefault() const
@@ -725,7 +745,7 @@ void LLInventoryFilter::updateFilterTypes(U64 types, U64& current_types)
void LLInventoryFilter::setSearchType(ESearchType type)
{
- if(mSearchType != type)
+ if (mSearchType != type)
{
mSearchType = type;
setModified();
@@ -918,6 +938,7 @@ void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
{
setModified(FILTER_RESTART);
}
+
mFilterOps.mFilterUUID = object_id;
mFilterOps.mFilterTypes = FILTERTYPE_UUID;
}
@@ -931,7 +952,6 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
if (mFilterSubString != filter_sub_string_new)
{
-
mFilterTokens.clear();
if (filter_sub_string_new.find_first_of("+") != std::string::npos)
{
@@ -1243,7 +1263,7 @@ void LLInventoryFilter::setFindAllLinksMode(const std::string &search_name, cons
{
// Save a copy of settings so that we will be able to restore it later
// but make sure we are not searching for links already
- if(mFilterOps.mFilterLinks != FILTERLINK_ONLY_LINKS)
+ if (mFilterOps.mFilterLinks != FILTERLINK_ONLY_LINKS)
{
mBackupFilterOps = mFilterOps;
}
@@ -1283,7 +1303,7 @@ void LLInventoryFilter::setModified(EFilterModified behavior)
}
// if not keeping current filter results, update last valid as well
- switch(mFilterModified)
+ switch (mFilterModified)
{
case FILTER_RESTART:
mFirstRequiredGeneration = mCurrentGeneration;
@@ -1499,11 +1519,11 @@ const std::string& LLInventoryFilter::getFilterText()
{
mFilterText += LLTrans::getString("Since Logoff");
}
+
return mFilterText;
}
-
-LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& other )
+LLInventoryFilter& LLInventoryFilter::operator =(const LLInventoryFilter& other)
{
setFilterObjectTypes(other.getFilterObjectTypes());
setDateRange(other.getMinDate(), other.getMaxDate());
@@ -1516,7 +1536,6 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
return *this;
}
-
void LLInventoryFilter::toParams(Params& params) const
{
params.filter_ops.types = (U32)getFilterObjectTypes();
@@ -1686,14 +1705,13 @@ std::string LLInventoryFilter::getEmptyLookupMessage(bool is_empty_folder) const
return LLTrans::getString(mEmptyLookupMessage, args);
}
-
}
bool LLInventoryFilter::areDateLimitsSet()
{
- return mFilterOps.mMinDate != time_min()
- || mFilterOps.mMaxDate != time_max()
- || mFilterOps.mHoursAgo != 0;
+ return mFilterOps.mMinDate != time_min()
+ || mFilterOps.mMaxDate != time_max()
+ || mFilterOps.mHoursAgo != 0;
}
bool LLInventoryFilter::showAllResults() const
@@ -1701,8 +1719,6 @@ bool LLInventoryFilter::showAllResults() const
return hasFilterString() && !mSingleFolderMode;
}
-
-
bool LLInventoryFilter::FilterOps::DateRange::validateBlock( bool emit_errors /*= true*/ ) const
{
bool valid = LLInitParam::Block<DateRange>::validateBlock(emit_errors);
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 7203c6f743..7e64a03e73 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -45,7 +45,8 @@ public:
SHOW_NO_FOLDERS
};
- enum EFilterType {
+ enum EFilterType
+ {
FILTERTYPE_NONE = 0,
FILTERTYPE_OBJECT = 0x1 << 0, // normal default search-by-object-type
FILTERTYPE_CATEGORY = 0x1 << 1, // search by folder type
@@ -275,9 +276,9 @@ public:
// +-------------------------------------------------------------------+
// + Execution And Results
// +-------------------------------------------------------------------+
- bool check(const LLFolderViewModelItem* listener);
+ bool check(const LLFolderViewModelItem* item);
bool check(const LLInventoryItem* item);
- bool checkFolder(const LLFolderViewModelItem* listener) const;
+ bool checkFolder(const LLFolderViewModelItem* item) const;
bool checkFolder(const LLUUID& folder_id) const;
bool showAllResults() const;
@@ -341,6 +342,7 @@ public:
private:
bool areDateLimitsSet();
+ bool checkAgainstFilterSubString(const std::string& desc) const;
bool checkAgainstFilterType(const class LLFolderViewModelItemInventory* listener) const;
bool checkAgainstFilterType(const LLInventoryItem* item) const;
bool checkAgainstPermissions(const class LLFolderViewModelItemInventory* listener) const;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index dc35c834bf..fdf77ab8df 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -2400,18 +2400,16 @@ void ungroup_folder_items(const LLUUID& folder_id)
LLInventoryModel::cat_array_t cats = *cat_array;
LLInventoryModel::item_array_t items = *item_array;
- for (LLInventoryModel::cat_array_t::const_iterator cat_iter = cats.begin(); cat_iter != cats.end(); ++cat_iter)
+ for (const LLPointer<LLViewerInventoryCategory>& cat : cats)
{
- LLViewerInventoryCategory* cat = *cat_iter;
if (cat)
{
gInventory.changeCategoryParent(cat, new_cat_uuid, false);
}
}
- for (LLInventoryModel::item_array_t::const_iterator item_iter = items.begin(); item_iter != items.end(); ++item_iter)
+ for (const LLPointer<LLViewerInventoryItem>& item : items)
{
- LLViewerInventoryItem* item = *item_iter;
- if(item)
+ if (item)
{
gInventory.changeItemParent(item, new_cat_uuid, false);
}
@@ -2424,8 +2422,7 @@ std::string get_searchable_description(LLInventoryModel* model, const LLUUID& it
{
if (model)
{
- const LLInventoryItem *item = model->getItem(item_id);
- if(item)
+ if (const LLInventoryItem* item = model->getItem(item_id))
{
std::string desc = item->getDescription();
LLStringUtil::toUpper(desc);
@@ -2439,8 +2436,7 @@ std::string get_searchable_creator_name(LLInventoryModel* model, const LLUUID& i
{
if (model)
{
- const LLInventoryItem *item = model->getItem(item_id);
- if(item)
+ if (const LLInventoryItem* item = model->getItem(item_id))
{
LLAvatarName av_name;
if (LLAvatarNameCache::get(item->getCreatorUUID(), &av_name))
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 46d1e822de..c4f93cee98 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -2649,7 +2649,8 @@ bool LLInventoryGallery::hasDescendents(const LLUUID& cat_id)
bool LLInventoryGallery::checkAgainstFilterType(const LLUUID& object_id)
{
const LLInventoryObject *object = gInventory.getObject(object_id);
- if(!object) return false;
+ if (!object)
+ return false;
LLInventoryType::EType object_type = LLInventoryType::IT_CATEGORY;
LLInventoryItem* inv_item = gInventory.getItem(object_id);
@@ -2657,8 +2658,8 @@ bool LLInventoryGallery::checkAgainstFilterType(const LLUUID& object_id)
{
object_type = inv_item->getInventoryType();
}
- const U32 filterTypes = (U32)mFilter->getFilterTypes();
+ const U32 filterTypes = (U32)mFilter->getFilterTypes();
if ((filterTypes & LLInventoryFilter::FILTERTYPE_OBJECT) && inv_item)
{
switch (object_type)
@@ -2726,7 +2727,7 @@ bool LLInventoryGallery::hasVisibleItems()
void LLInventoryGallery::handleModifiedFilter()
{
- if(mFilter->isModified())
+ if (mFilter->isModified())
{
reArrangeRows();
}
@@ -2737,7 +2738,7 @@ void LLInventoryGallery::setSortOrder(U32 order, bool update)
bool dirty = (mSortOrder != order);
mSortOrder = order;
- if(update && dirty)
+ if (update && dirty)
{
mNeedsArrange = true;
gIdleCallbacks.addFunction(onIdle, (void*)this);
@@ -2789,11 +2790,11 @@ void LLInventoryGalleryItem::setType(LLAssetType::EType type, LLInventoryType::E
mIsLink = is_link;
std::string icon_name = LLInventoryIcon::getIconName(mType, inventory_type, flags);
- if(mIsFolder)
+ if (mIsFolder)
{
mSortGroup = SG_NORMAL_FOLDER;
LLUUID folder_id = mUUID;
- if(mIsLink)
+ if (mIsLink)
{
LLInventoryObject* obj = gInventory.getObject(mUUID);
if (obj)
@@ -2820,7 +2821,7 @@ void LLInventoryGalleryItem::setType(LLAssetType::EType type, LLInventoryType::E
else
{
const LLInventoryItem *item = gInventory.getItem(mUUID);
- if(item && (LLAssetType::AT_CALLINGCARD != item->getType()) && !mIsLink)
+ if (item && (LLAssetType::AT_CALLINGCARD != item->getType()) && !mIsLink)
{
std::string delim(" --");
bool copy = item->getPermissions().allowCopyBy(gAgent.getID());
@@ -2851,7 +2852,7 @@ void LLInventoryGalleryItem::setType(LLAssetType::EType type, LLInventoryType::E
void LLInventoryGalleryItem::setThumbnail(LLUUID id)
{
mDefaultImage = id.isNull();
- if(mDefaultImage)
+ if (mDefaultImage)
{
mThumbnailCtrl->clearTexture();
}
@@ -2900,10 +2901,10 @@ void LLInventoryGalleryItem::setSelected(bool value)
mSelected = value;
mTextBgPanel->setBackgroundVisible(value);
- if(mSelected)
+ if (mSelected)
{
LLViewerInventoryItem* item = gInventory.getItem(mUUID);
- if(item && !item->isFinished())
+ if (item && !item->isFinished())
{
LLInventoryModelBackgroundFetch::instance().start(mUUID, false);
}
@@ -2926,6 +2927,7 @@ bool LLInventoryGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask)
{
mGallery->changeItemSelection(mUUID, false);
}
+
setFocus(true);
mGallery->claimEditHandler();
@@ -2958,7 +2960,7 @@ bool LLInventoryGalleryItem::handleRightMouseDown(S32 x, S32 y, MASK mask)
bool LLInventoryGalleryItem::handleMouseUp(S32 x, S32 y, MASK mask)
{
- if(hasMouseCapture())
+ if (hasMouseCapture())
{
gFocusMgr.setMouseCapture(NULL);
return true;
@@ -2968,13 +2970,13 @@ bool LLInventoryGalleryItem::handleMouseUp(S32 x, S32 y, MASK mask)
bool LLInventoryGalleryItem::handleHover(S32 x, S32 y, MASK mask)
{
- if(hasMouseCapture())
+ if (hasMouseCapture())
{
S32 screen_x;
S32 screen_y;
localPointToScreen(x, y, &screen_x, &screen_y );
- if(LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y) && mGallery)
+ if (LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y) && mGallery)
{
mGallery->startDrag();
return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask);
@@ -2993,13 +2995,13 @@ bool LLInventoryGalleryItem::handleDoubleClick(S32 x, S32 y, MASK mask)
LLHandle<LLPanel> handle = mGallery->getHandle();
LLUUID navigate_to = mUUID;
doOnIdleOneTime([handle, navigate_to]()
- {
- LLInventoryGallery* gallery = (LLInventoryGallery*)handle.get();
- if (gallery)
- {
- gallery->setRootFolder(navigate_to);
- }
- });
+ {
+ LLInventoryGallery* gallery = (LLInventoryGallery*)handle.get();
+ if (gallery)
+ {
+ gallery->setRootFolder(navigate_to);
+ }
+ });
}
else
{
@@ -3078,7 +3080,7 @@ void LLInventoryGalleryItem::setWorn(bool value)
{
mWorn = value;
- if(mWorn)
+ if (mWorn)
{
mWornSuffix = (mType == LLAssetType::AT_GESTURE) ? LLTrans::getString("active") : LLTrans::getString("worn");
}
@@ -3092,7 +3094,7 @@ void LLInventoryGalleryItem::setWorn(bool value)
LLFontGL* LLInventoryGalleryItem::getTextFont()
{
- if(mWorn)
+ if (mWorn)
{
return LLFontGL::getFontSansSerifSmallBold();
}
@@ -3127,12 +3129,10 @@ bool LLInventoryGalleryItem::isFadeItem()
void LLThumbnailsObserver::changed(U32 mask)
{
std::vector<LLUUID> deleted_ids;
- for (item_map_t::iterator iter = mItemMap.begin();
- iter != mItemMap.end();
- ++iter)
+ for (item_map_t::value_type& it : mItemMap)
{
- const LLUUID& obj_id = (*iter).first;
- LLItemData& data = (*iter).second;
+ const LLUUID& obj_id = it.first;
+ LLItemData& data = it.second;
LLInventoryObject* obj = gInventory.getObject(obj_id);
if (!obj)
@@ -3158,8 +3158,7 @@ void LLThumbnailsObserver::changed(U32 mask)
bool LLThumbnailsObserver::addItem(const LLUUID& obj_id, callback_t cb)
{
- LLInventoryObject* obj = gInventory.getObject(obj_id);
- if (obj)
+ if (LLInventoryObject* obj = gInventory.getObject(obj_id))
{
mItemMap.insert(item_map_value_t(obj_id, LLItemData(obj_id, obj->getThumbnailUUID(), cb)));
return true;
@@ -3190,79 +3189,74 @@ bool LLInventoryGallery::baseHandleDragAndDrop(LLUUID dest_id, bool drop,
}
bool accepted = false;
- switch(cargo_type)
- {
- case DAD_TEXTURE:
- case DAD_SOUND:
- case DAD_CALLINGCARD:
- case DAD_LANDMARK:
- case DAD_SCRIPT:
- case DAD_CLOTHING:
- case DAD_OBJECT:
- case DAD_NOTECARD:
- case DAD_BODYPART:
- case DAD_ANIMATION:
- case DAD_GESTURE:
- case DAD_MESH:
- case DAD_SETTINGS:
+ switch (cargo_type)
+ {
+ case DAD_TEXTURE:
+ case DAD_SOUND:
+ case DAD_CALLINGCARD:
+ case DAD_LANDMARK:
+ case DAD_SCRIPT:
+ case DAD_CLOTHING:
+ case DAD_OBJECT:
+ case DAD_NOTECARD:
+ case DAD_BODYPART:
+ case DAD_ANIMATION:
+ case DAD_GESTURE:
+ case DAD_MESH:
+ case DAD_SETTINGS:
+ accepted = dragItemIntoFolder(dest_id, inv_item, drop, tooltip_msg, true);
+ if (accepted && drop)
+ {
+ // Don't select immediately, wait for item to arrive
+ mItemsToSelect.push_back(inv_item->getUUID());
+ }
+ break;
+ case DAD_LINK:
+ // DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER.
+ // If we have an item of AT_LINK_FOLDER type we should process the linked
+ // category being dragged or dropped into folder.
+ if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
+ {
+ LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID());
+ if (linked_category)
+ {
+ accepted = dragCategoryIntoFolder(dest_id, (LLInventoryCategory*)linked_category, drop, tooltip_msg, true);
+ }
+ }
+ else
+ {
accepted = dragItemIntoFolder(dest_id, inv_item, drop, tooltip_msg, true);
+ }
+ if (accepted && drop && inv_item)
+ {
+ mItemsToSelect.push_back(inv_item->getUUID());
+ }
+ break;
+ case DAD_CATEGORY:
+ if (LLFriendCardsManager::instance().isAnyFriendCategory(dest_id))
+ {
+ accepted = false;
+ }
+ else
+ {
+ LLInventoryCategory* cat_ptr = (LLInventoryCategory*)cargo_data;
+ accepted = dragCategoryIntoFolder(dest_id, cat_ptr, drop, tooltip_msg, false);
if (accepted && drop)
{
- // Don't select immediately, wait for item to arrive
- mItemsToSelect.push_back(inv_item->getUUID());
- }
- break;
- case DAD_LINK:
- // DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER.
- // If we have an item of AT_LINK_FOLDER type we should process the linked
- // category being dragged or dropped into folder.
- if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
- {
- LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID());
- if (linked_category)
- {
- accepted = dragCategoryIntoFolder(dest_id, (LLInventoryCategory*)linked_category, drop, tooltip_msg, true);
- }
- }
- else
- {
- accepted = dragItemIntoFolder(dest_id, inv_item, drop, tooltip_msg, true);
- }
- if (accepted && drop && inv_item)
- {
- mItemsToSelect.push_back(inv_item->getUUID());
- }
- break;
- case DAD_CATEGORY:
- if (LLFriendCardsManager::instance().isAnyFriendCategory(dest_id))
- {
- accepted = false;
- }
- else
- {
- LLInventoryCategory* cat_ptr = (LLInventoryCategory*)cargo_data;
- accepted = dragCategoryIntoFolder(dest_id, cat_ptr, drop, tooltip_msg, false);
- if (accepted && drop)
- {
- mItemsToSelect.push_back(cat_ptr->getUUID());
- }
+ mItemsToSelect.push_back(cat_ptr->getUUID());
}
- break;
- case DAD_ROOT_CATEGORY:
- case DAD_NONE:
- break;
- default:
- LL_WARNS() << "Unhandled cargo type for drag&drop " << cargo_type << LL_ENDL;
- break;
- }
- if (accepted)
- {
- *accept = ACCEPT_YES_MULTI;
- }
- else
- {
- *accept = ACCEPT_NO;
+ }
+ break;
+ case DAD_ROOT_CATEGORY:
+ case DAD_NONE:
+ break;
+ default:
+ LL_WARNS() << "Unhandled cargo type for drag&drop " << cargo_type << LL_ENDL;
+ break;
}
+
+ *accept = accepted ? ACCEPT_YES_MULTI : ACCEPT_NO;
+
return accepted;
}
@@ -3274,16 +3268,20 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
{
return false;
}
- LLInventoryModel* model = &gInventory;
- if (!model || !inv_item) return false;
+ LLInventoryModel* model = &gInventory;
+ if (!model || !inv_item)
+ return false;
// cannot drag into library
- if((gInventory.getRootFolderID() != folder_id) && !model->isObjectDescendentOf(folder_id, gInventory.getRootFolderID()))
+ if (gInventory.getRootFolderID() != folder_id &&
+ !model->isObjectDescendentOf(folder_id, gInventory.getRootFolderID()))
{
return false;
}
- if (!isAgentAvatarValid()) return false;
+
+ if (!isAgentAvatarValid())
+ return false;
const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
@@ -3302,7 +3300,7 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
bool accept = false;
LLViewerObject* object = NULL;
- if(LLToolDragAndDrop::SOURCE_AGENT == source)
+ if (LLToolDragAndDrop::SOURCE_AGENT == source)
{
const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
@@ -3317,21 +3315,24 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
switch (inv_item->getActualType())
{
- case LLAssetType::AT_CATEGORY:
- is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
- break;
- default:
- break;
+ case LLAssetType::AT_CATEGORY:
+ is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
+ break;
+ default:
+ break;
}
+
// Can't explicitly drag things out of the COF.
if (move_is_outof_current_outfit)
{
is_movable = false;
}
+
if (move_is_into_trash)
{
is_movable &= inv_item->getIsLinkType() || !get_is_item_worn(inv_item->getUUID());
}
+
if (is_movable)
{
// Don't allow creating duplicates in the Calling Card/Friends
@@ -3540,7 +3541,7 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
move_inv->mMoveList.push_back(item_pair);
move_inv->mCallback = NULL;
move_inv->mUserData = NULL;
- if(is_move)
+ if (is_move)
{
warn_move_inventory(object, move_inv);
}
@@ -3555,7 +3556,7 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
}
}
}
- else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
+ else if (LLToolDragAndDrop::SOURCE_NOTECARD == source)
{
if (move_is_into_marketplacelistings)
{
@@ -3582,7 +3583,7 @@ bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop,
inv_item);
}
}
- else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
+ else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
{
LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item;
if(item && item->isFinished())
@@ -3665,11 +3666,14 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
return false;
}
- if (!inv_cat) return false; // shouldn't happen, but in case item is incorrectly parented in which case inv_cat will be NULL
+ if (!inv_cat) // shouldn't happen, but in case item is incorrectly parented in which case inv_cat will be NULL
+ return false;
+
+ if (!isAgentAvatarValid())
+ return false;
- if (!isAgentAvatarValid()) return false;
// cannot drag into library
- if((gInventory.getRootFolderID() != dest_id) && !model->isObjectDescendentOf(dest_id, gInventory.getRootFolderID()))
+ if ((gInventory.getRootFolderID() != dest_id) && !model->isObjectDescendentOf(dest_id, gInventory.getRootFolderID()))
{
return false;
}
@@ -3758,7 +3762,7 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
is_movable = false;
}
}
- else if(dest_cat && dest_cat->getPreferredType() == LLFolderType::FT_NONE)
+ else if (dest_cat && dest_cat->getPreferredType() == LLFolderType::FT_NONE)
{
is_movable = ((inv_cat->getPreferredType() == LLFolderType::FT_NONE) || (inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT));
}
@@ -3767,7 +3771,7 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
is_movable = false;
}
}
- if(is_movable && move_is_into_current_outfit && is_link)
+ if (is_movable && move_is_into_current_outfit && is_link)
{
is_movable = false;
}
@@ -3795,7 +3799,7 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
for (S32 i=0; i < descendent_categories.size(); ++i)
{
LLInventoryCategory* category = descendent_categories[i];
- if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
+ if (LLFolderType::lookupIsProtectedType(category->getPreferredType()))
{
// Can't move "special folders" (e.g. Textures Folder).
is_movable = false;
@@ -4000,7 +4004,6 @@ void outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id)
LLInventoryObject::const_object_list_t link_array;
-
LLInventoryModel::item_array_t::iterator iter = items->begin();
LLInventoryModel::item_array_t::iterator end = items->end();
while (iter!=end)
@@ -4038,4 +4041,3 @@ void dropToMyOutfits(LLInventoryCategory* inv_cat)
inventory_func_type func = boost::bind(&outfitFolderCreatedCallback, inv_cat->getUUID(), _1);
gInventory.createNewCategory(dest_id, LLFolderType::FT_OUTFIT, inv_cat->getName(), func, inv_cat->getThumbnailUUID());
}
-
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 949ce2558f..d08cd91382 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -414,8 +414,10 @@ void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType
{
getFilter().setFilterObjectTypes(types);
}
- if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY)
+ else if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY)
+ {
getFilter().setFilterCategoryTypes(types);
+ }
}
void LLInventoryPanel::setFilterWorn()
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 7b78ad2934..dbf56c2b6d 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -31,6 +31,7 @@
// linden library includes
#include "llerror.h"
+#include "llfiltereditor.h"
#include "llfloaterreg.h"
#include "llfontgl.h"
#include "llinventorydefines.h"
@@ -83,8 +84,14 @@ bool LLPanelContents::postBuild()
childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
childSetAction("button permissions",&LLPanelContents::onClickPermissions, this);
+ mFilterEditor = getChild<LLFilterEditor>("contents_filter");
+ mFilterEditor->setCommitCallback([&](LLUICtrl*, const LLSD&) { onFilterEdit(); });
+
mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory");
+ // update permission filter once UI is fully initialized
+ mSavedFolderState.setApply(false);
+
return true;
}
@@ -129,6 +136,38 @@ void LLPanelContents::getState(LLViewerObject *objectp )
mPanelInventoryObject->setEnabled(!objectp->isPermanentEnforced());
}
+void LLPanelContents::onFilterEdit()
+{
+ const std::string& filter_substring = mFilterEditor->getText();
+ if (filter_substring.empty())
+ {
+ if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The current filter and the new filter are empty, nothing to do
+ return;
+ }
+
+ mSavedFolderState.setApply(true);
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
+
+ // Add a folder with the current item to the list of previously opened folders
+ LLOpenFoldersWithSelection opener;
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(opener);
+ mPanelInventoryObject->getRootFolder()->scrollToShowSelection();
+ }
+ else if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The first letter in search term, save existing folder open state
+ if (!mPanelInventoryObject->getFilter().isNotDefault())
+ {
+ mSavedFolderState.setApply(false);
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
+ }
+ }
+
+ mPanelInventoryObject->getFilter().setFilterSubString(filter_substring);
+}
+
void LLPanelContents::refresh()
{
const bool children_ok = true;
@@ -149,7 +188,6 @@ void LLPanelContents::clearContents()
}
}
-
//
// Static functions
//
@@ -199,7 +237,6 @@ void LLPanelContents::onClickNewScript(void *userdata)
}
}
-
// static
void LLPanelContents::onClickPermissions(void *userdata)
{
diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h
index 748bb76a82..bb6308e8b8 100644
--- a/indra/newview/llpanelcontents.h
+++ b/indra/newview/llpanelcontents.h
@@ -27,12 +27,13 @@
#ifndef LL_LLPANELCONTENTS_H
#define LL_LLPANELCONTENTS_H
-#include "v3math.h"
-#include "llpanel.h"
+#include "llfolderview.h"
#include "llinventory.h"
+#include "llpanel.h"
#include "lluuid.h"
#include "llviewerobject.h"
#include "llvoinventorylistener.h"
+#include "v3math.h"
class LLButton;
class LLPanelObjectInventory;
@@ -66,9 +67,12 @@ public:
static const char* PERMS_ANYONE_CONTROL_KEY;
protected:
- void getState(LLViewerObject *object);
+ void getState(LLViewerObject *object);
+ void onFilterEdit();
public:
+ class LLFilterEditor* mFilterEditor;
+ LLSaveFolderState mSavedFolderState;
LLPanelObjectInventory* mPanelInventoryObject;
};
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index e4503a69d2..8bc5989b89 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -910,12 +910,12 @@ bool LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop,
EAcceptance* accept,
std::string& tooltip_msg)
{
- // Check to see if we are auto scrolling from the last frame
- LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
- bool needsToScroll = panel->getScrollableContainer()->canAutoScroll(x, y);
- if(mFilterTabs)
+ if (mFilterTabs)
{
- if(needsToScroll)
+ // Check to see if we are auto scrolling from the last frame
+ LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
+ bool needsToScroll = panel->getScrollableContainer()->canAutoScroll(x, y);
+ if (needsToScroll)
{
mFilterTabs->startDragAndDropDelayTimer();
}
@@ -932,9 +932,9 @@ void LLPanelMainInventory::changed(U32)
updateItemcountText();
}
-void LLPanelMainInventory::setFocusFilterEditor()
+void LLPanelMainInventory::setFocusOnFilterEditor()
{
- if(mFilterEditor)
+ if (mFilterEditor)
{
mFilterEditor->setFocus(true);
}
@@ -999,6 +999,22 @@ void LLPanelMainInventory::updateItemcountText()
mCategoryCount = gInventory.getCategoryCount();
update = true;
}
+
+ EFetchState currentFetchState{ EFetchState::Unknown };
+ if (LLInventoryModelBackgroundFetch::instance().folderFetchActive())
+ {
+ currentFetchState = EFetchState::Fetching;
+ }
+ else if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched())
+ {
+ currentFetchState = EFetchState::Complete;
+ }
+
+ if (mLastFetchState != currentFetchState)
+ {
+ mLastFetchState = currentFetchState;
+ update = true;
+ }
}
if (mLastFilterText != getFilterText())
@@ -1029,17 +1045,17 @@ void LLPanelMainInventory::updateItemcountText()
}
else
{
- if (LLInventoryModelBackgroundFetch::instance().folderFetchActive())
+ switch (mLastFetchState)
{
+ case EFetchState::Fetching:
text = getString("ItemcountFetching", string_args);
- }
- else if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched())
- {
+ break;
+ case EFetchState::Complete:
text = getString("ItemcountCompleted", string_args);
- }
- else
- {
+ break;
+ default:
text = getString("ItemcountUnknown", string_args);
+ break;
}
}
@@ -1245,7 +1261,6 @@ void LLFloaterInventoryFinder::draw()
filtered_by_all_types = false;
}
-
if (!getChild<LLUICtrl>("check_calling_card")->getValue())
{
filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
@@ -1265,8 +1280,6 @@ void LLFloaterInventoryFinder::draw()
}
if (!getChild<LLUICtrl>("check_landmark")->getValue())
-
-
{
filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
filtered_by_all_types = false;
@@ -1327,9 +1340,8 @@ void LLFloaterInventoryFinder::draw()
filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
}
-
bool is_sf_mode = mPanelMainInventory->isSingleFolderMode();
- if(is_sf_mode && mPanelMainInventory->isGalleryViewMode())
+ if (is_sf_mode && mPanelMainInventory->isGalleryViewMode())
{
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setShowFolderState(getCheckShowEmpty() ?
LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
@@ -1337,7 +1349,7 @@ void LLFloaterInventoryFinder::draw()
}
else
{
- if(is_sf_mode && mPanelMainInventory->isCombinationViewMode())
+ if (is_sf_mode && mPanelMainInventory->isCombinationViewMode())
{
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setShowFolderState(getCheckShowEmpty() ?
LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
@@ -1369,9 +1381,8 @@ void LLFloaterInventoryFinder::draw()
}
hours += days * 24;
-
mPanelMainInventory->setFilterTextFromFilter();
- if(is_sf_mode && mPanelMainInventory->isGalleryViewMode())
+ if (is_sf_mode && mPanelMainInventory->isGalleryViewMode())
{
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setHoursAgo(hours);
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setDateRangeLastLogoff(getCheckSinceLogoff());
@@ -1379,7 +1390,7 @@ void LLFloaterInventoryFinder::draw()
}
else
{
- if(is_sf_mode && mPanelMainInventory->isCombinationViewMode())
+ if (is_sf_mode && mPanelMainInventory->isCombinationViewMode())
{
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setHoursAgo(hours);
mPanelMainInventory->mCombinationGalleryPanel->getFilter().setDateRangeLastLogoff(getCheckSinceLogoff());
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index d28daddd73..a78c0c0fad 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -103,7 +103,7 @@ public:
void onFilterEdit(const std::string& search_string );
- void setFocusFilterEditor();
+ void setFocusOnFilterEditor();
static LLFloaterSidePanelContainer* newWindow();
static void newFolderWindow(LLUUID folder_id = LLUUID(), LLUUID item_to_select = LLUUID());
@@ -182,6 +182,13 @@ protected:
LLSidepanelInventory* getParentSidepanelInventory();
private:
+ enum class EFetchState
+ {
+ Unknown,
+ Fetching,
+ Complete
+ };
+
LLFloaterInventoryFinder* getFinder();
LLFilterEditor* mFilterEditor;
@@ -202,6 +209,7 @@ private:
S32 mCategoryCount = 0;
std::string mCategoryCountString;
LLComboBox* mSearchTypeCombo;
+ EFetchState mLastFetchState{ EFetchState::Unknown };
LLButton* mBackBtn;
LLButton* mForwardBtn;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 395e9eca82..dcd7fdf30d 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -173,8 +173,7 @@ LLTaskInvFVBridge::LLTaskInvFVBridge(
mAssetType(LLAssetType::AT_NONE),
mInventoryType(LLInventoryType::IT_NONE)
{
- const LLInventoryItem *item = findItem();
- if (item)
+ if (const LLInventoryItem* item = findItem())
{
mAssetType = item->getType();
mInventoryType = item->getInventoryType();
@@ -183,15 +182,15 @@ LLTaskInvFVBridge::LLTaskInvFVBridge(
LLInventoryObject* LLTaskInvFVBridge::findInvObject() const
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if (object)
+ const LLUUID& id = mPanel->getTaskUUID();
+ if (LLViewerObject* object = gObjectList.findObject(id))
{
return object->getInventoryObject(mUUID);
}
+
return NULL;
}
-
LLInventoryItem* LLTaskInvFVBridge::findItem() const
{
return dynamic_cast<LLInventoryItem*>(findInvObject());
@@ -204,27 +203,24 @@ void LLTaskInvFVBridge::showProperties()
S32 LLTaskInvFVBridge::getPrice()
{
- LLInventoryItem* item = findItem();
- if(item)
+ if (LLInventoryItem* item = findItem())
{
return item->getSaleInfo().getSalePrice();
}
- else
- {
- return -1;
- }
+
+ return -1;
}
+// virtual
const std::string& LLTaskInvFVBridge::getName() const
{
return mName;
}
+// virtual
const std::string& LLTaskInvFVBridge::getDisplayName() const
{
- LLInventoryItem* item = findItem();
-
- if(item)
+ if (LLInventoryItem* item = findItem())
{
mDisplayName.assign(item->getName());
@@ -240,31 +236,32 @@ const std::string& LLTaskInvFVBridge::getDisplayName() const
bool mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
bool xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE);
- if(!copy)
+ if (!copy)
{
mDisplayName.append(LLTrans::getString("no_copy"));
}
- if(!mod)
+ if (!mod)
{
mDisplayName.append(LLTrans::getString("no_modify"));
}
- if(!xfer)
+ if (!xfer)
{
mDisplayName.append(LLTrans::getString("no_transfer"));
}
}
mSearchableName.assign(mDisplayName + getLabelSuffix());
+ LLStringUtil::toUpper(mSearchableName);
return mDisplayName;
}
+// virtual
const std::string& LLTaskInvFVBridge::getSearchableName() const
{
return mSearchableName;
}
-
// BUG: No creation dates for task inventory
time_t LLTaskInvFVBridge::getCreationDate() const
{
@@ -272,14 +269,14 @@ time_t LLTaskInvFVBridge::getCreationDate() const
}
void LLTaskInvFVBridge::setCreationDate(time_t creation_date_utc)
-{}
-
+{
+}
LLUIImagePtr LLTaskInvFVBridge::getIcon() const
{
- const bool item_is_multi = (mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS);
+ const bool item_is_multi = mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS;
- return LLInventoryIcon::getIcon(mAssetType, mInventoryType, 0, item_is_multi );
+ return LLInventoryIcon::getIcon(mAssetType, mInventoryType, 0, item_is_multi);
}
void LLTaskInvFVBridge::openItem()
@@ -290,38 +287,38 @@ void LLTaskInvFVBridge::openItem()
bool LLTaskInvFVBridge::isItemRenameable() const
{
- if(gAgent.isGodlike()) return true;
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (gAgent.isGodlike())
+ return true;
+
+ if (LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
- LLInventoryItem* item = (LLInventoryItem*)(object->getInventoryObject(mUUID));
- if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
- GP_OBJECT_MANIPULATE, GOD_LIKE))
+ if (LLInventoryItem* item = (LLInventoryItem*)(object->getInventoryObject(mUUID)))
{
- return true;
+ if (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE, GOD_LIKE))
+ {
+ return true;
+ }
}
}
+
return false;
}
bool LLTaskInvFVBridge::renameItem(const std::string& new_name)
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
- LLViewerInventoryItem* item = NULL;
- item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID);
- if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
- GP_OBJECT_MANIPULATE, GOD_LIKE)))
+ if (LLViewerInventoryItem* item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID))
{
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
- new_item->rename(new_name);
- object->updateInventory(
- new_item,
- TASK_INVENTORY_ITEM_KEY,
- false);
+ if (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE, GOD_LIKE))
+ {
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+ new_item->rename(new_name);
+ object->updateInventory(new_item, TASK_INVENTORY_ITEM_KEY, false);
+ }
}
}
+
return true;
}
@@ -338,33 +335,35 @@ bool LLTaskInvFVBridge::isItemMovable() const
bool LLTaskInvFVBridge::isItemRemovable(bool check_worn) const
{
- const LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object
- && (object->permModify() || object->permYouOwner()))
+ if (const LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
- return true;
+ return object->permModify() || object->permYouOwner();
}
+
return false;
}
bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
- if(option == 0 && object)
- {
- // yes
- LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray();
- for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray();
- list_it != list_end;
- ++list_it)
+ if (option == 0)
+ {
+ if (LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID()))
{
- object->removeInventory(list_it->asUUID());
- }
+ // yes
+ const LLSD& inventory_ids = notification["payload"]["inventory_ids"];
+ LLSD::array_const_iterator list_it = inventory_ids.beginArray();
+ LLSD::array_const_iterator list_end = inventory_ids.endArray();
+ for (; list_it != list_end; ++list_it)
+ {
+ object->removeInventory(list_it->asUUID());
+ }
- // refresh the UI.
- panel->refresh();
+ // refresh the UI.
+ panel->refresh();
+ }
}
+
return false;
}
@@ -374,31 +373,29 @@ typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
bool LLTaskInvFVBridge::removeItem()
{
- if(isItemRemovable() && mPanel)
+ if (isItemRemovable() && mPanel)
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
- if(object->permModify())
+ if (object->permModify())
{
// just do it.
object->removeInventory(mUUID);
return true;
}
- else
- {
- LLSD payload;
- payload["task_id"] = mPanel->getTaskUUID();
- payload["inventory_ids"].append(mUUID);
- LLNotificationsUtil::add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
- return false;
- }
+
+ LLSD payload;
+ payload["task_id"] = mPanel->getTaskUUID();
+ payload["inventory_ids"].append(mUUID);
+ LLNotificationsUtil::add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+ return false;
}
}
+
return false;
}
-void LLTaskInvFVBridge::removeBatch(std::vector<LLFolderViewModelItem*>& batch)
+void LLTaskInvFVBridge::removeBatch(std::vector<LLFolderViewModelItem*>& batch)
{
if (!mPanel)
{
@@ -415,24 +412,21 @@ void LLTaskInvFVBridge::removeBatch(std::vector<LLFolderViewModelItem*>& batch
{
LLSD payload;
payload["task_id"] = mPanel->getTaskUUID();
- for (S32 i = 0; i < (S32)batch.size(); i++)
+ for (LLFolderViewModelItem* item : batch)
{
- LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
- payload["inventory_ids"].append(itemp->getUUID());
+ payload["inventory_ids"].append(((LLTaskInvFVBridge*)item)->getUUID());
}
LLNotificationsUtil::add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
-
}
else
{
- for (S32 i = 0; i < (S32)batch.size(); i++)
+ for (LLFolderViewModelItem* item : batch)
{
- LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
-
- if(itemp->isItemRemovable())
+ LLTaskInvFVBridge* bridge = (LLTaskInvFVBridge*)item;
+ if (bridge->isItemRemovable())
{
- // just do it.
- object->removeInventory(itemp->getUUID());
+ // Just do it.
+ object->removeInventory(bridge->getUUID());
}
}
}
@@ -444,10 +438,12 @@ void LLTaskInvFVBridge::move(LLFolderViewModelItem* parent_listener)
bool LLTaskInvFVBridge::isItemCopyable(bool can_link) const
{
- LLInventoryItem* item = findItem();
- if(!item) return false;
- return gAgent.allowOperation(PERM_COPY, item->getPermissions(),
- GP_OBJECT_MANIPULATE);
+ if (LLInventoryItem* item = findItem())
+ {
+ return gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE);
+ }
+
+ return false;
}
bool LLTaskInvFVBridge::copyToClipboard() const
@@ -476,38 +472,35 @@ void LLTaskInvFVBridge::pasteLinkFromClipboard()
bool LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
//LL_INFOS() << "LLTaskInvFVBridge::startDrag()" << LL_ENDL;
- if(mPanel)
+ if (!mPanel)
+ return false;
+
+ if (LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (LLInventoryItem* inv = (LLInventoryItem*)object->getInventoryObject(mUUID))
{
- LLInventoryItem* inv = NULL;
- if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+ const LLPermissions& perm = inv->getPermissions();
+ bool can_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+ if (!can_copy && object->isAttachment())
{
- const LLPermissions& perm = inv->getPermissions();
- bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
- GP_OBJECT_MANIPULATE);
- if (object->isAttachment() && !can_copy)
- {
- //RN: no copy contents of attachments cannot be dragged out
- // due to a race condition and possible exploit where
- // attached objects do not update their inventory items
- // when their contents are manipulated
- return false;
- }
- if((can_copy && perm.allowTransferTo(gAgent.getID()))
- || object->permYouOwner())
-// || gAgent.isGodlike())
-
- {
- *type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
+ //RN: no copy contents of attachments cannot be dragged out
+ // due to a race condition and possible exploit where
+ // attached objects do not update their inventory items
+ // when their contents are manipulated
+ return false;
+ }
- *id = inv->getUUID();
- return true;
- }
+ if ((can_copy && perm.allowTransferTo(gAgent.getID()))
+ || object->permYouOwner())
+// || gAgent.isGodlike())
+ {
+ *type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
+ *id = inv->getUUID();
+ return true;
}
}
}
+
return false;
}
@@ -554,7 +547,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
disabled_items.push_back(std::string("Task Properties"));
}
- if(isItemRenameable())
+ if (isItemRenameable())
{
items.push_back(std::string("Task Rename"));
if ((flags & FIRST_SELECTED_ITEM) == 0)
@@ -562,7 +555,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
disabled_items.push_back(std::string("Task Rename"));
}
}
- if(isItemRemovable())
+ if (isItemRemovable())
{
items.push_back(std::string("Task Remove"));
}
@@ -585,10 +578,10 @@ public:
virtual LLUIImagePtr getIcon() const;
virtual const std::string& getDisplayName() const;
- virtual bool isItemRenameable() const;
+ virtual bool isItemRenameable() const { return false; }
// virtual bool isItemCopyable() const { return false; }
- virtual bool renameItem(const std::string& new_name);
- virtual bool isItemRemovable(bool check_worn = true) const;
+ virtual bool renameItem(const std::string& new_name) { return false; }
+ virtual bool isItemRemovable(bool check_worn = true) const { return false; }
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual bool hasChildren() const;
virtual bool startDrag(EDragAndDropType* type, LLUUID* id) const;
@@ -609,6 +602,7 @@ LLTaskCategoryBridge::LLTaskCategoryBridge(
{
}
+// virtual
LLUIImagePtr LLTaskCategoryBridge::getIcon() const
{
return LLUI::getUIImage("Inv_FolderClosed");
@@ -617,9 +611,7 @@ LLUIImagePtr LLTaskCategoryBridge::getIcon() const
// virtual
const std::string& LLTaskCategoryBridge::getDisplayName() const
{
- LLInventoryObject* cat = findInvObject();
-
- if (cat)
+ if (LLInventoryObject* cat = findInvObject())
{
std::string name = cat->getName();
if (mChildren.size() > 0)
@@ -633,26 +625,13 @@ const std::string& LLTaskCategoryBridge::getDisplayName() const
name.append(" " + LLTrans::getString("InventoryItemsCount", args));
}
mDisplayName.assign(name);
+ LLStringUtil::toUpper(name);
+ mSearchableName.assign(name);
}
return mDisplayName;
}
-bool LLTaskCategoryBridge::isItemRenameable() const
-{
- return false;
-}
-
-bool LLTaskCategoryBridge::renameItem(const std::string& new_name)
-{
- return false;
-}
-
-bool LLTaskCategoryBridge::isItemRemovable(bool check_worn) const
-{
- return false;
-}
-
void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
std::vector<std::string> items;
@@ -660,6 +639,7 @@ void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
hide_context_entries(menu, items, disabled_items);
}
+// virtual
bool LLTaskCategoryBridge::hasChildren() const
{
// return true if we have or do know know if we have children.
@@ -667,20 +647,21 @@ bool LLTaskCategoryBridge::hasChildren() const
return false;
}
+// virtual
void LLTaskCategoryBridge::openItem()
{
}
+// virtual
bool LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
//LL_INFOS() << "LLTaskInvFVBridge::startDrag()" << LL_ENDL;
- if(mPanel && mUUID.notNull())
+ if (mPanel && mUUID.notNull())
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()))
{
const LLInventoryObject* cat = object->getInventoryObject(mUUID);
- if ( (cat) && (move_inv_category_world_to_agent(mUUID, LLUUID::null, false)) )
+ if (cat && move_inv_category_world_to_agent(mUUID, LLUUID::null, false))
{
*type = LLViewerAssetType::lookupDragAndDropType(cat->getType());
*id = mUUID;
@@ -691,6 +672,7 @@ bool LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
return false;
}
+// virtual
bool LLTaskCategoryBridge::dragOrDrop(MASK mask, bool drop,
EDragAndDropType cargo_type,
void* cargo_data,
@@ -775,14 +757,13 @@ public:
virtual void openItem();
};
+// virtual
void LLTaskTextureBridge::openItem()
{
LL_INFOS() << "LLTaskTextureBridge::openItem()" << LL_ENDL;
- LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
- if(preview)
+ if (LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES))
{
- LLInventoryItem* item = findItem();
- if(item)
+ if (LLInventoryItem* item = findItem())
{
preview->setAuxItem(item);
}
@@ -810,11 +791,13 @@ public:
static void openSoundPreview(void* data);
};
+// virtual
void LLTaskSoundBridge::openItem()
{
openSoundPreview((void*)this);
}
+// static
void LLTaskSoundBridge::openSoundPreview(void* data)
{
LLTaskSoundBridge* self = (LLTaskSoundBridge*)data;
@@ -842,6 +825,7 @@ void LLTaskSoundBridge::performAction(LLInventoryModel* model, std::string actio
LLTaskInvFVBridge::performAction(model, action);
}
+// virtual
void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
LLInventoryItem* item = findItem();
@@ -865,18 +849,17 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
disabled_items.push_back(std::string("Task Properties"));
}
- if(isItemRenameable())
+ if (isItemRenameable())
{
items.push_back(std::string("Task Rename"));
}
- if(isItemRemovable())
+ if (isItemRemovable())
{
items.push_back(std::string("Task Remove"));
}
items.push_back(std::string("Task Play"));
-
hide_context_entries(menu, items, disabled_items);
}
@@ -905,20 +888,10 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
- virtual bool isItemRenameable() const;
- virtual bool renameItem(const std::string& new_name);
+ virtual bool isItemRenameable() const { return false; }
+ virtual bool renameItem(const std::string& new_name) { return false; }
};
-bool LLTaskCallingCardBridge::isItemRenameable() const
-{
- return false;
-}
-
-bool LLTaskCallingCardBridge::renameItem(const std::string& new_name)
-{
- return false;
-}
-
///----------------------------------------------------------------------------
/// Class LLTaskScriptBridge
@@ -951,6 +924,7 @@ public:
//static void copyToInventory(void* userdata);
};
+// virtual
void LLTaskLSLBridge::openItem()
{
LL_INFOS() << "LLTaskLSLBridge::openItem() " << mUUID << LL_ENDL;
@@ -982,6 +956,7 @@ void LLTaskLSLBridge::openItem()
}
}
+// virtual
bool LLTaskLSLBridge::removeItem()
{
LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID));
@@ -1019,6 +994,7 @@ public:
virtual bool removeItem();
};
+// virtual
void LLTaskNotecardBridge::openItem()
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
@@ -1045,6 +1021,7 @@ void LLTaskNotecardBridge::openItem()
}
}
+// virtual
bool LLTaskNotecardBridge::removeItem()
{
LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID));
@@ -1068,6 +1045,7 @@ public:
virtual bool removeItem();
};
+// virtual
void LLTaskGestureBridge::openItem()
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
@@ -1078,6 +1056,7 @@ void LLTaskGestureBridge::openItem()
LLPreviewGesture::show(mUUID, mPanel->getTaskUUID());
}
+// virtual
bool LLTaskGestureBridge::removeItem()
{
// Don't need to deactivate gesture because gestures inside objects can never be active.
@@ -1102,10 +1081,12 @@ public:
virtual bool removeItem();
};
+// virtual
void LLTaskAnimationBridge::openItem()
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(!object || object->isInventoryPending())
+ const LLUUID& task_id = mPanel->getTaskUUID();
+ LLViewerObject* object = gObjectList.findObject(task_id);
+ if (!object || object->isInventoryPending())
{
return;
}
@@ -1117,6 +1098,7 @@ void LLTaskAnimationBridge::openItem()
}
}
+// virtual
bool LLTaskAnimationBridge::removeItem()
{
LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID));
@@ -1139,6 +1121,7 @@ public:
virtual LLUIImagePtr getIcon() const;
};
+// virtual
LLUIImagePtr LLTaskWearableBridge::getIcon() const
{
return LLInventoryIcon::getIcon(mAssetType, mInventoryType, mFlags, false );
@@ -1161,11 +1144,13 @@ public:
virtual LLSettingsType::type_e getSettingsType() const;
};
+// virtual
LLUIImagePtr LLTaskSettingsBridge::getIcon() const
{
return LLInventoryIcon::getIcon(mAssetType, mInventoryType, mFlags, false);
}
+// virtual
LLSettingsType::type_e LLTaskSettingsBridge::getSettingsType() const
{
return LLSettingsType::ST_NONE;
@@ -1188,6 +1173,7 @@ public:
bool removeItem() override;
};
+// virtual
void LLTaskMaterialBridge::openItem()
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
@@ -1216,13 +1202,13 @@ void LLTaskMaterialBridge::openItem()
}
}
+// virtual
bool LLTaskMaterialBridge::removeItem()
{
LLFloaterReg::hideInstance("material_editor", LLSD(mUUID));
return LLTaskInvFVBridge::removeItem();
}
-
///----------------------------------------------------------------------------
/// LLTaskInvFVBridge impl
//----------------------------------------------------------------------------
@@ -1404,7 +1390,6 @@ void LLPanelObjectInventory::clearContents()
}
}
-
void LLPanelObjectInventory::reset()
{
clearContents();
@@ -1458,12 +1443,13 @@ void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
S32 serial_num,
void* data)
{
- if(!object) return;
+ if (!object)
+ return;
//LL_INFOS() << "invetnory arrived: \n"
// << " panel UUID: " << panel->mTaskUUID << "\n"
// << " task UUID: " << object->mID << LL_ENDL;
- if(mTaskUUID == object->mID)
+ if (mTaskUUID == object->mID)
{
mInventoryNeedsUpdate = true;
}
@@ -1475,23 +1461,19 @@ void LLPanelObjectInventory::updateInventory()
// << " panel UUID: " << panel->mTaskUUID << "\n"
// << " task UUID: " << object->mID << LL_ENDL;
// We're still interested in this task's inventory.
+ bool inventory_has_focus = mHaveInventory && mFolders && gFocusMgr.childHasKeyboardFocus(mFolders);
+
std::vector<LLUUID> selected_item_ids;
- std::set<LLFolderViewItem*> selected_items;
- bool inventory_has_focus = false;
if (mHaveInventory && mFolders)
{
- selected_items = mFolders->getSelectionList();
- inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
- }
- for (std::set<LLFolderViewItem*>::iterator it = selected_items.begin(), end_it = selected_items.end();
- it != end_it;
- ++it)
- {
- selected_item_ids.push_back(static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID());
+ std::set<LLFolderViewItem*> selected_items = mFolders->getSelectionList();
+ for (LLFolderViewItem* item : selected_items)
+ {
+ selected_item_ids.push_back(static_cast<LLFolderViewModelItemInventory*>(item->getViewModelItem())->getUUID());
+ }
}
- LLViewerObject* objectp = gObjectList.findObject(mTaskUUID);
- if (objectp)
+ if (LLViewerObject* objectp = gObjectList.findObject(mTaskUUID))
{
LLInventoryObject* inventory_root = objectp->getInventoryRoot();
LLInventoryObject::object_list_t contents;
@@ -1527,15 +1509,12 @@ void LLPanelObjectInventory::updateInventory()
}
// restore previous selection
- std::vector<LLUUID>::iterator selection_it;
bool first_item = true;
- for (selection_it = selected_item_ids.begin(); selection_it != selected_item_ids.end(); ++selection_it)
+ for (const LLUUID& item_id : selected_item_ids)
{
- LLFolderViewItem* selected_item = getItemByID(*selection_it);
-
- if (selected_item)
+ if (LLFolderViewItem* selected_item = getItemByID(item_id))
{
- //HACK: "set" first item then "change" each other one to get keyboard focus right
+ // HACK: "set" first item then "change" each other one to get keyboard focus right
if (first_item)
{
mFolders->setSelection(selected_item, true, inventory_has_focus);
@@ -1552,6 +1531,7 @@ void LLPanelObjectInventory::updateInventory()
{
mFolders->requestArrange();
}
+
mInventoryNeedsUpdate = false;
// Edit menu handler is set in onFocusReceived
}
@@ -1567,10 +1547,9 @@ void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root
{
return;
}
+
// Create a visible root category.
- LLTaskInvFVBridge* bridge = NULL;
- bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root);
- if(bridge)
+ if (LLTaskInvFVBridge* bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root))
{
LLUIColor item_color = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
@@ -1613,59 +1592,50 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
// Find all in the first pass
std::vector<obj_folder_pair*> child_categories;
- LLTaskInvFVBridge* bridge;
- LLFolderViewItem* view;
-
- LLInventoryObject::object_list_t::iterator it = inventory->begin();
- LLInventoryObject::object_list_t::iterator end = inventory->end();
- for( ; it != end; ++it)
+ for (const LLPointer<LLInventoryObject>& obj : *inventory)
{
- LLInventoryObject* obj = *it;
-
- if(parent->getUUID() == obj->getParentUUID())
+ if (parent->getUUID() == obj->getParentUUID())
{
- bridge = LLTaskInvFVBridge::createObjectBridge(this, obj);
- if(!bridge)
+ if (LLTaskInvFVBridge* bridge = LLTaskInvFVBridge::createObjectBridge(this, obj))
{
- continue;
- }
- if(LLAssetType::AT_CATEGORY == obj->getType())
- {
- LLFolderViewFolder::Params p;
- p.name = obj->getName();
- p.root = mFolders;
- p.listener = bridge;
- p.tool_tip = p.name;
- p.font_color = item_color;
- p.font_highlight_color = item_color;
- view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
- child_categories.push_back(new obj_folder_pair(obj,
- (LLFolderViewFolder*)view));
- }
- else
- {
- LLFolderViewItem::Params params;
- params.name(obj->getName());
- params.creation_date(bridge->getCreationDate());
- params.root(mFolders);
- params.listener(bridge);
- params.rect(LLRect());
- params.tool_tip = params.name;
- params.font_color = item_color;
- params.font_highlight_color = item_color;
- view = LLUICtrlFactory::create<LLFolderViewItem> (params);
+ LLFolderViewItem* view;
+ if (LLAssetType::AT_CATEGORY == obj->getType())
+ {
+ LLFolderViewFolder::Params params;
+ params.name = obj->getName();
+ params.root = mFolders;
+ params.listener = bridge;
+ params.tool_tip = params.name;
+ params.font_color = item_color;
+ params.font_highlight_color = item_color;
+ view = LLUICtrlFactory::create<LLFolderViewFolder>(params);
+ child_categories.push_back(new obj_folder_pair(obj, (LLFolderViewFolder*)view));
+ }
+ else
+ {
+ LLFolderViewItem::Params params;
+ params.name = obj->getName();
+ params.root = mFolders;
+ params.listener = bridge;
+ params.creation_date = bridge->getCreationDate();
+ params.rect = LLRect();
+ params.tool_tip = params.name;
+ params.font_color = item_color;
+ params.font_highlight_color = item_color;
+ view = LLUICtrlFactory::create<LLFolderViewItem>(params);
+ }
+
+ view->addToFolder(folder);
+ addItemID(obj->getUUID(), view);
}
- view->addToFolder(folder);
- addItemID(obj->getUUID(), view);
}
}
// now, for each category, do the second pass
- for(S32 i = 0; i < child_categories.size(); i++)
+ for (obj_folder_pair* pair : child_categories)
{
- createViewsForCategory(inventory, child_categories[i]->first,
- child_categories[i]->second );
- delete child_categories[i];
+ createViewsForCategory(inventory, pair->first, pair->second);
+ delete pair;
}
folder->setChildrenInited(true);
}
@@ -1677,11 +1647,10 @@ void LLPanelObjectInventory::refresh()
const bool non_root_ok = true;
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
LLSelectNode* node = selection->getFirstRootNode(NULL, non_root_ok);
- if(node && node->mValid)
+ if (node && node->mValid)
{
LLViewerObject* object = node->getObject();
- if(object && ((selection->getRootObjectCount() == 1)
- || (selection->getObjectCount() == 1)))
+ if (object && ((selection->getRootObjectCount() == 1) || (selection->getObjectCount() == 1)))
{
// determine if we need to make a request. Start with a
// default based on if we have inventory at all.
@@ -1689,7 +1658,7 @@ void LLPanelObjectInventory::refresh()
// If the task id is different than what we've stored,
// then make the request.
- if(mTaskUUID != object->mID)
+ if (mTaskUUID != object->mID)
{
mTaskUUID = object->mID;
mAttachmentUUID = object->getAttachmentItemID();
@@ -1715,26 +1684,28 @@ void LLPanelObjectInventory::refresh()
// Based on the node information, we may need to dirty the
// object inventory and get it again.
- if(node->mValid)
+ if (node->mValid)
{
- if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
+ if (node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
{
make_request = true;
}
}
// do the request if necessary.
- if(make_request)
+ if (make_request)
{
requestVOInventory();
}
has_inventory = true;
}
}
- if(!has_inventory)
+
+ if (!has_inventory)
{
clearInventoryTask();
}
+
mInventoryViewModel.setTaskID(mTaskUUID);
//LL_INFOS() << "LLPanelObjectInventory::refresh() " << mTaskUUID << LL_ENDL;
}
@@ -1749,7 +1720,7 @@ void LLPanelObjectInventory::clearInventoryTask()
void LLPanelObjectInventory::removeSelectedItem()
{
- if(mFolders)
+ if (mFolders)
{
mFolders->removeSelectedItems();
}
@@ -1757,7 +1728,7 @@ void LLPanelObjectInventory::removeSelectedItem()
void LLPanelObjectInventory::startRenamingSelectedItem()
{
- if(mFolders)
+ if (mFolders)
{
mFolders->startRenamingSelectedItem();
}
@@ -1767,25 +1738,26 @@ void LLPanelObjectInventory::draw()
{
LLPanel::draw();
- if(mIsInventoryEmpty)
+ if (mIsInventoryEmpty)
{
- if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
+ std::string text;
+ if (!mHaveInventory && mTaskUUID.notNull())
+ {
+ text = LLTrans::getString("LoadingContents");
+ }
+ else if (mHaveInventory)
{
- LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0,
- (S32)(getRect().getWidth() * 0.5f),
- 10,
- LLColor4( 1, 1, 1, 1 ),
- LLFontGL::HCENTER,
- LLFontGL::BOTTOM);
+ text = LLTrans::getString("NoContents");
}
- else if(mHaveInventory)
+
+ if (!text.empty())
{
- LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0,
- (S32)(getRect().getWidth() * 0.5f),
- 10,
- LLColor4( 1, 1, 1, 1 ),
- LLFontGL::HCENTER,
- LLFontGL::BOTTOM);
+ LLFontGL::getFontSansSerif()->renderUTF8(text, 0,
+ (S32)(getRect().getWidth() * 0.5f),
+ 10,
+ LLColor4(1, 1, 1, 1),
+ LLFontGL::HCENTER,
+ LLFontGL::BOTTOM);
}
}
}
@@ -1799,31 +1771,21 @@ void LLPanelObjectInventory::deleteAllChildren()
bool LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
{
- if (mFolders)
- {
- LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL);
- if (!folderp)
- {
- return false;
- }
- // Try to pass on unmodified mouse coordinates
- S32 local_x = x - mFolders->getRect().mLeft;
- S32 local_y = y - mFolders->getRect().mBottom;
+ LLFolderViewItem* folderp = mFolders ? mFolders->getNextFromChild(NULL) : NULL;
+ if (!folderp)
+ return false;
- if (mFolders->pointInView(local_x, local_y))
- {
- return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
- }
- else
- {
- //force mouse coordinates to be inside folder rectangle
- return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
- }
- }
- else
+ // Try to pass on unmodified mouse coordinates
+ S32 local_x = x - mFolders->getRect().mLeft;
+ S32 local_y = y - mFolders->getRect().mBottom;
+
+ if (mFolders->pointInView(local_x, local_y))
{
- return false;
+ return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
}
+
+ //force mouse coordinates to be inside folder rectangle
+ return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
}
//static
@@ -1860,11 +1822,9 @@ void LLPanelObjectInventory::onFocusReceived()
LLPanel::onFocusReceived();
}
-
LLFolderViewItem* LLPanelObjectInventory::getItemByID( const LLUUID& id )
{
- std::map<LLUUID, LLFolderViewItem*>::iterator map_it;
- map_it = mItemMap.find(id);
+ std::map<LLUUID, LLFolderViewItem*>::iterator map_it = mItemMap.find(id);
if (map_it != mItemMap.end())
{
return map_it->second;
@@ -1915,21 +1875,21 @@ bool LLPanelObjectInventory::isSelectionRemovable()
{
return false;
}
+
std::set<LLFolderViewItem*> selection_set = mFolders->getRoot()->getSelectionList();
if (selection_set.empty())
{
return false;
}
- for (std::set<LLFolderViewItem*>::iterator iter = selection_set.begin();
- iter != selection_set.end();
- ++iter)
+
+ for (LLFolderViewItem* item : selection_set)
{
- LLFolderViewItem *item = *iter;
const LLFolderViewModelItemInventory *listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item->getViewModelItem());
if (!listener || !listener->isItemRemovable() || listener->isItemInTrash())
{
return false;
}
}
+
return true;
}
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
index c150a841ae..abb48dbeed 100644
--- a/indra/newview/llpanelobjectinventory.h
+++ b/indra/newview/llpanelobjectinventory.h
@@ -73,6 +73,8 @@ public:
void startRenamingSelectedItem();
LLFolderView* getRootFolder() const { return mFolders; }
+ LLInventoryFilter& getFilter() { return mInventoryViewModel.getFilter(); }
+ const LLInventoryFilter& getFilter() const { return mInventoryViewModel.getFilter(); }
virtual void draw();
virtual void deleteAllChildren();
diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp
index 24cf543864..619882dc5e 100644
--- a/indra/newview/llsettingspicker.cpp
+++ b/indra/newview/llsettingspicker.cpp
@@ -98,7 +98,7 @@ bool LLFloaterSettingsPicker::postBuild()
setTitle(prefix + " " + label);
mFilterEdit = getChild<LLFilterEditor>(FLT_INVENTORY_SEARCH);
- mFilterEdit->setCommitCallback([this](LLUICtrl*, const LLSD& param){ onFilterEdit(param.asString()); });
+ mFilterEdit->setCommitCallback([this](LLUICtrl*, const LLSD& param) { onFilterEdit(param.asString()); });
mInventoryPanel = getChild<LLInventoryPanel>(PNL_INVENTORY);
if (mInventoryPanel)
@@ -203,7 +203,6 @@ void LLFloaterSettingsPicker::draw()
LLFloater::draw();
}
-
//=========================================================================
void LLFloaterSettingsPicker::onFilterEdit(const std::string& search_string)
{
@@ -224,7 +223,6 @@ void LLFloaterSettingsPicker::onFilterEdit(const std::string& search_string)
LLOpenFoldersWithSelection opener;
mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener);
mInventoryPanel->getRootFolder()->scrollToShowSelection();
-
}
else if (mInventoryPanel->getFilterSubString().empty())
{
@@ -269,6 +267,7 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i
}
}
}
+
bool track_picker_enabled = mTrackMode != TRACK_NONE;
getChild<LLView>(CMB_TRACK_SELECTION)->setEnabled(is_item && track_picker_enabled && mSettingAssetID == asset_id);
@@ -304,13 +303,14 @@ void LLFloaterSettingsPicker::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr
LLComboBox* track_selection = getChild<LLComboBox>(CMB_TRACK_SELECTION);
track_selection->clear();
track_selection->removeall();
+
if (!settings)
{
LL_WARNS() << "Failed to load asset " << asset_id << LL_ENDL;
return;
}
- LLSettingsDay::ptr_t pday = std::dynamic_pointer_cast<LLSettingsDay>(settings);
+ LLSettingsDay::ptr_t pday = std::dynamic_pointer_cast<LLSettingsDay>(settings);
if (!pday)
{
LL_WARNS() << "Wrong asset type received by id " << asset_id << LL_ENDL;
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 5693f2808c..b48417bd71 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -387,7 +387,7 @@ void LLSidepanelInventory::onToggleInboxBtn()
void LLSidepanelInventory::onOpen(const LLSD& key)
{
LLFirstUse::newInventory(false);
- mPanelMainInventory->setFocusFilterEditor();
+ mPanelMainInventory->setFocusOnFilterEditor();
#if AUTO_EXPAND_INBOX
// Expand the inbox if we have fresh items
LLPanelMarketplaceInbox * inbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index e517d009f5..a1a67c319c 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -300,7 +300,7 @@ bool LLSpatialGroup::addObject(LLDrawable *drawablep)
}
{
drawablep->setGroup(this);
- setState(OBJECT_DIRTY | GEOM_DIRTY);
+ setState(static_cast<U32>(OBJECT_DIRTY) | static_cast<U32>(GEOM_DIRTY));
setOcclusionState(LLSpatialGroup::DISCARD_QUERY, LLSpatialGroup::STATE_MODE_ALL_CAMERAS);
gPipeline.markRebuild(this);
if (drawablep->isSpatialBridge())
@@ -730,7 +730,7 @@ bool LLSpatialGroup::changeLOD()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_SPATIAL;
- if (hasState(ALPHA_DIRTY | OBJECT_DIRTY))
+ if (hasState(static_cast<U32>(ALPHA_DIRTY) | static_cast<U32>(OBJECT_DIRTY)))
{
//a rebuild is going to happen, update distance and LoD
return true;
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index c074d6a89a..3aaa3d60e8 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -47,7 +47,7 @@
#include <unordered_map>
#define SG_STATE_INHERIT_MASK (OCCLUDED)
-#define SG_INITIAL_STATE_MASK (DIRTY | GEOM_DIRTY)
+#define SG_INITIAL_STATE_MASK (static_cast<U32>(DIRTY) | static_cast<U32>(GEOM_DIRTY))
class LLViewerOctreePartition;
class LLSpatialPartition;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index df9f99c360..a5d199d9d7 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -9768,6 +9768,8 @@ void initialize_menus()
registrar.add("Agent.ToggleMicrophone", boost::bind(&LLAgent::toggleMicrophone, _2), cb_info::UNTRUSTED_BLOCK);
enable.add("Agent.IsMicrophoneOn", boost::bind(&LLAgent::isMicrophoneOn, _2));
enable.add("Agent.IsActionAllowed", boost::bind(&LLAgent::isActionAllowed, _2));
+ commit.add("Agent.ToggleHearMediaSoundFromAvatar", boost::bind(&LLAgent::toggleHearMediaSoundFromAvatar));
+ commit.add("Agent.ToggleHearVoiceFromAvatar", boost::bind(&LLAgent::toggleHearVoiceFromAvatar));
// File menu
init_menu_file();
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
index 7dfa94b99f..dc31995eb1 100644
--- a/indra/newview/llviewerobjectlist.h
+++ b/indra/newview/llviewerobjectlist.h
@@ -259,15 +259,16 @@ extern LLViewerObjectList gObjectList;
*/
inline LLViewerObject *LLViewerObjectList::findObject(const LLUUID &id)
{
+ if (id.isNull())
+ return NULL;
+
auto iter = mUUIDObjectMap.find(id);
- if(iter != mUUIDObjectMap.end())
+ if (iter != mUUIDObjectMap.end())
{
return iter->second;
}
- else
- {
- return NULL;
- }
+
+ return NULL;
}
inline LLViewerObject *LLViewerObjectList::getObject(const S32 index)
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 115db57a06..71add76dd2 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -345,11 +345,10 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
impl = regionp->getRegionImplNC();
- ++(impl->mSeedCapAttempts);
-
if (!result.isMap() || result.has("error"))
{
LL_WARNS("AppInit", "Capabilities") << "Malformed response" << LL_ENDL;
+ ++(impl->mSeedCapAttempts);
// setup for retry.
continue;
}
@@ -359,6 +358,7 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
if (!status)
{
LL_WARNS("AppInit", "Capabilities") << "HttpStatus error " << LL_ENDL;
+ ++(impl->mSeedCapAttempts);
// setup for retry.
continue;
}
@@ -369,6 +369,7 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
if (id != impl->mHttpResponderID) // region is no longer referring to this request
{
LL_WARNS("AppInit", "Capabilities") << "Received results for a stale capabilities request!" << LL_ENDL;
+ ++(impl->mSeedCapAttempts);
// setup for retry.
continue;
}
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 14228b469f..5793a28b80 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -503,7 +503,7 @@ S32 LLEmbeddedItems::getIndexFromEmbeddedChar(llwchar wch)
}
else
{
- LL_WARNS() << "Embedded char " << wch << " not found, using 0" << LL_ENDL;
+ LL_WARNS() << "Embedded char " << (int)wch << " not found, using 0" << LL_ENDL;
return 0;
}
}
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index d16656abfc..681d91c945 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1553,6 +1553,17 @@ void LLViewerFetchedTexture::postCreateTexture()
setActive();
+ // rebuild any volumes that are using this texture for sculpts in case their LoD has changed
+ for (U32 i = 0; i < mNumVolumes[LLRender::SCULPT_TEX]; ++i)
+ {
+ LLVOVolume* volume = mVolumeList[LLRender::SCULPT_TEX][i];
+ if (volume)
+ {
+ volume->mSculptChanged = true;
+ gPipeline.markRebuild(volume->mDrawable);
+ }
+ }
+
if (!needsToSaveRawImage())
{
mNeedsAux = false;
@@ -2647,7 +2658,7 @@ void LLViewerFetchedTexture::destroyRawImage()
if (mAuxRawImage.notNull() && !needsToSaveRawImage())
{
sAuxCount--;
- mAuxRawImage = NULL;
+ mAuxRawImage = nullptr;
}
if (mRawImage.notNull())
@@ -2662,7 +2673,7 @@ void LLViewerFetchedTexture::destroyRawImage()
}
}
- mRawImage = NULL;
+ mRawImage = nullptr;
mIsRawImageValid = false;
mRawDiscardLevel = INVALID_DISCARD_LEVEL;
@@ -2774,7 +2785,9 @@ void LLViewerFetchedTexture::readbackRawImage()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
- if (mGLTexturep.notNull() && mGLTexturep->getTexName() != 0 && mRawImage.isNull())
+ // readback the raw image from vram if the current raw image is null or smaller than the texture
+ if (mGLTexturep.notNull() && mGLTexturep->getTexName() != 0 &&
+ (mRawImage.isNull() || mRawImage->getWidth() < mGLTexturep->getWidth() || mRawImage->getHeight() < mGLTexturep->getHeight() ))
{
mRawImage = new LLImageRaw();
if (!mGLTexturep->readBackRaw(-1, mRawImage, false))
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 09ab501743..3a94f87a98 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -8445,14 +8445,14 @@ bool LLVOAvatar::isFullyLoaded() const
bool LLVOAvatar::isTooComplex() const
{
bool too_complex;
- static LLCachedControl<S32> compelxity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
- bool render_friend = (isBuddy() && compelxity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY);
+ static LLCachedControl<S32> complexity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
+ bool render_friend = (isBuddy() && complexity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY);
if (isSelf() || render_friend || mVisuallyMuteSetting == AV_ALWAYS_RENDER)
{
too_complex = false;
}
- else if (compelxity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS && !mIsControlAvatar)
+ else if (complexity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS && !mIsControlAvatar)
{
too_complex = true;
}
@@ -8480,16 +8480,16 @@ bool LLVOAvatar::isTooSlow() const
return mTooSlow;
}
- static LLCachedControl<S32> compelxity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
+ static LLCachedControl<S32> complexity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
static LLCachedControl<bool> friends_only(gSavedSettings, "RenderAvatarFriendsOnly", false);
bool is_friend = isBuddy();
- bool render_friend = is_friend && compelxity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY;
+ bool render_friend = is_friend && complexity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY;
if (render_friend || mVisuallyMuteSetting == AV_ALWAYS_RENDER)
{
return false;
}
- else if (compelxity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS)
+ else if (complexity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS)
{
return true;
}
@@ -8505,7 +8505,7 @@ bool LLVOAvatar::isTooSlow() const
void LLVOAvatar::updateTooSlow()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
- static LLCachedControl<S32> compelxity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
+ static LLCachedControl<S32> complexity_render_mode(gSavedSettings, "RenderAvatarComplexityMode");
static LLCachedControl<bool> allowSelfImpostor(gSavedSettings, "AllowSelfImpostor");
const auto id = getID();
@@ -8538,14 +8538,14 @@ void LLVOAvatar::updateTooSlow()
if(!mTooSlowWithoutShadows) // if we were not previously above the full impostor cap
{
- bool always_render_friends = compelxity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY;
+ bool always_render_friends = complexity_render_mode > AV_RENDER_LIMIT_BY_COMPLEXITY;
bool render_friend_or_exception = (always_render_friends && isBuddy()) ||
( getVisualMuteSettings() == LLVOAvatar::AV_ALWAYS_RENDER );
if( (!isSelf() || allowSelfImpostor) && !render_friend_or_exception)
{
// Note: slow rendering Friends still get their shadows zapped.
mTooSlowWithoutShadows = (getGPURenderTime()*2.f >= max_art_ms) // NOTE: assumes shadow rendering doubles render time
- || (compelxity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS && !mIsControlAvatar);
+ || (complexity_render_mode == AV_RENDER_ONLY_SHOW_FRIENDS && !mIsControlAvatar);
}
}
}
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index 6903af2619..67adcbb244 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -596,7 +596,7 @@ U32 LLVOGrass::getPartitionType() const
}
LLGrassPartition::LLGrassPartition(LLViewerRegion* regionp)
-: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK | LLVertexBuffer::MAP_TEXTURE_INDEX, true, regionp)
+: LLSpatialPartition(static_cast<U32>(LLDrawPoolAlpha::VERTEX_DATA_MASK) | static_cast<U32>(LLVertexBuffer::MAP_TEXTURE_INDEX), true, regionp)
{
mDrawableType = LLPipeline::RENDER_TYPE_GRASS;
mPartitionType = LLViewerRegion::PARTITION_GRASS;
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 5af7528ada..1a35a71706 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -256,8 +256,8 @@ void LLVoiceClient::setSpatialVoiceModule(const std::string &voice_server_type)
if (inProximalChannel())
{
mSpatialVoiceModule->processChannels(false);
+ module->processChannels(true);
}
- module->processChannels(true);
mSpatialVoiceModule = module;
mSpatialVoiceModule->updateSettings();
}
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index 22b53c0b85..4528b57061 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -2012,7 +2012,10 @@ bool LLWebRTCVoiceClient::estateSessionState::processConnectionStates()
// shut down connections to neighbors that are too far away.
spatialConnection.get()->shutDown();
}
- neighbor_ids.erase(regionID);
+ if (!spatialConnection.get()->isShuttingDown())
+ {
+ neighbor_ids.erase(regionID);
+ }
}
// add new connections for new neighbors
@@ -2512,8 +2515,6 @@ void LLVoiceWebRTCConnection::breakVoiceConnectionCoro(connectionPtr_t connectio
httpOpts->setWantHeaders(true);
- connection->mOutstandingRequests++;
-
// tell the server to shut down the connection as a courtesy.
// shutdownConnection will drop the WebRTC connection which will
// also shut things down.
@@ -2544,6 +2545,7 @@ void LLVoiceWebRTCSpatialConnection::requestVoiceConnection()
// try again.
setVoiceConnectionState(VOICE_STATE_REQUEST_CONNECTION);
+ mOutstandingRequests--;
return;
}
@@ -2551,6 +2553,7 @@ void LLVoiceWebRTCSpatialConnection::requestVoiceConnection()
if (url.empty())
{
setVoiceConnectionState(VOICE_STATE_SESSION_RETRY);
+ mOutstandingRequests--;
return;
}
@@ -2575,7 +2578,6 @@ void LLVoiceWebRTCSpatialConnection::requestVoiceConnection()
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
httpOpts->setWantHeaders(true);
- mOutstandingRequests++;
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOpts);
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
@@ -2663,7 +2665,10 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOICE;
- processIceUpdates();
+ if (!mShutDown)
+ {
+ processIceUpdates();
+ }
switch (getVoiceConnectionState())
{
@@ -2707,6 +2712,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
// a given voice channel. On completion, we'll move on to the
// VOICE_STATE_SESSION_ESTABLISHED via a callback on a webrtc thread.
setVoiceConnectionState(VOICE_STATE_CONNECTION_WAIT);
+ mOutstandingRequests++;
LLCoros::getInstance()->launch("LLVoiceWebRTCConnection::requestVoiceConnectionCoro",
boost::bind(&LLVoiceWebRTCConnection::requestVoiceConnectionCoro, this->shared_from_this()));
break;
@@ -2757,24 +2763,25 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
case VOICE_STATE_SESSION_UP:
{
mRetryWaitPeriod = 0;
- mRetryWaitSecs = (F32)((F32) rand() / (RAND_MAX)) + 0.5f;
- LLUUID agentRegionID;
- if (isSpatial() && gAgent.getRegion())
- {
-
- bool primary = (mRegionID == gAgent.getRegion()->getRegionID());
- if (primary != mPrimary)
- {
- mPrimary = primary;
- sendJoin();
- }
- }
+ mRetryWaitSecs = (F32)((F32)rand() / (RAND_MAX)) + 0.5f;
// we'll stay here as long as the session remains up.
if (mShutDown)
{
setVoiceConnectionState(VOICE_STATE_DISCONNECT);
}
+ else
+ {
+ if (isSpatial() && gAgent.getRegion())
+ {
+ bool primary = (mRegionID == gAgent.getRegion()->getRegionID());
+ if (primary != mPrimary)
+ {
+ mPrimary = primary;
+ sendJoin();
+ }
+ }
+ }
break;
}
@@ -2799,6 +2806,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
case VOICE_STATE_DISCONNECT:
if (!LLWebRTCVoiceClient::isShuttingDown())
{
+ mOutstandingRequests++;
setVoiceConnectionState(VOICE_STATE_WAIT_FOR_EXIT);
LLCoros::instance().launch("LLVoiceWebRTCConnection::breakVoiceConnectionCoro",
boost::bind(&LLVoiceWebRTCConnection::breakVoiceConnectionCoro, this->shared_from_this()));
@@ -2807,7 +2815,6 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
{
// llwebrtc::terminate() is already shuting down the connection.
setVoiceConnectionState(VOICE_STATE_WAIT_FOR_CLOSE);
- mOutstandingRequests++;
}
break;
@@ -3051,7 +3058,6 @@ void LLVoiceWebRTCConnection::sendJoin()
boost::json::object root;
boost::json::object join_obj;
- LLUUID regionID = gAgent.getRegion()->getRegionID();
if (mPrimary)
{
join_obj["p"] = true;
@@ -3134,6 +3140,7 @@ void LLVoiceWebRTCAdHocConnection::requestVoiceConnection()
LL_DEBUGS("Voice") << "no capabilities for voice provisioning; retrying " << LL_ENDL;
// try again.
setVoiceConnectionState(VOICE_STATE_REQUEST_CONNECTION);
+ mOutstandingRequests--;
return;
}
@@ -3141,6 +3148,7 @@ void LLVoiceWebRTCAdHocConnection::requestVoiceConnection()
if (url.empty())
{
setVoiceConnectionState(VOICE_STATE_SESSION_RETRY);
+ mOutstandingRequests--;
return;
}
@@ -3164,7 +3172,7 @@ void LLVoiceWebRTCAdHocConnection::requestVoiceConnection()
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
httpOpts->setWantHeaders(true);
- mOutstandingRequests++;
+
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOpts);
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h
index 32127f9b17..ff82d2739d 100644
--- a/indra/newview/llvoicewebrtc.h
+++ b/indra/newview/llvoicewebrtc.h
@@ -631,6 +631,11 @@ class LLVoiceWebRTCConnection :
mShutDown = true;
}
+ bool isShuttingDown()
+ {
+ return mShutDown;
+ }
+
void OnVoiceConnectionRequestSuccess(const LLSD &body);
protected:
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 81f16cf8cb..8f792c1042 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -702,7 +702,7 @@ U32 LLVOPartGroup::getPartitionType() const
}
LLParticlePartition::LLParticlePartition(LLViewerRegion* regionp)
-: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK | LLVertexBuffer::MAP_TEXTURE_INDEX, true, regionp)
+: LLSpatialPartition(static_cast<U32>(LLDrawPoolAlpha::VERTEX_DATA_MASK) | static_cast<U32>(LLVertexBuffer::MAP_TEXTURE_INDEX), true, regionp)
{
mRenderPass = LLRenderPass::PASS_ALPHA;
mDrawableType = LLPipeline::RENDER_TYPE_PARTICLES;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 7da4358f86..4b63354893 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1149,7 +1149,7 @@ void LLVOVolume::updateSculptTexture()
{
mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, true, LLGLTexture::BOOST_SCULPTED, LLViewerTexture::LOD_TEXTURE);
mSculptTexture->forceToSaveRawImage(0, F32_MAX);
- mSculptTexture->addTextureStats(256.f*256.f);
+ mSculptTexture->setKnownDrawSize(256, 256);
}
mSkinInfoUnavaliable = false;
@@ -1251,7 +1251,7 @@ void LLVOVolume::sculpt()
discard_level = mSculptTexture->getSavedRawImageLevel();
}
- if (!raw_image)
+ if (!raw_image || raw_image->getWidth() < mSculptTexture->getWidth() || raw_image->getHeight() < mSculptTexture->getHeight())
{
// last resort, read back from GL
mSculptTexture->readbackRawImage();
@@ -1338,17 +1338,8 @@ void LLVOVolume::sculpt()
mSculptTexture->updateBindStatsForTester() ;
}
}
- getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset());
- //notify rebuild any other VOVolumes that reference this sculpty volume
- for (S32 i = 0; i < mSculptTexture->getNumVolumes(LLRender::SCULPT_TEX); ++i)
- {
- LLVOVolume* volume = (*(mSculptTexture->getVolumeList(LLRender::SCULPT_TEX)))[i];
- if (volume != this && volume->getVolume() == getVolume())
- {
- gPipeline.markRebuild(volume->mDrawable, LLDrawable::REBUILD_GEOMETRY);
- }
- }
+ getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset());
}
}
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 6241bf42d6..97a5131260 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -451,6 +451,7 @@ public:
private:
friend class LLDrawable;
friend class LLFace;
+ friend class LLViewerFetchedTexture;
bool mFaceMappingChanged;
LLFrameTimer mTextureUpdateTimer;
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 4757bd42e0..ca854ac7f7 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -186,6 +186,7 @@ LLWorldMapView::LLWorldMapView() :
mMouseDownY(0),
mSelectIDStart(0),
mMapScale(0.f),
+ mMapRatio(0.5),
mTargetMapScale(0.f),
mMapIterpTime(MAP_ITERP_TIME_CONSTANT)
{
@@ -285,7 +286,9 @@ void LLWorldMapView::setScale(F32 scale, bool snap)
{
mMapScale = 0.1f;
}
+ mMapRatio = mMapScale / REGION_WIDTH_METERS;
mMapIterpTime = MAP_ITERP_TIME_CONSTANT;
+
F32 ratio = (scale / old_scale);
mPanX *= ratio;
mPanY *= ratio;
@@ -359,6 +362,7 @@ bool is_agent_in_region(LLViewerRegion* region, LLSimInfo* info)
void LLWorldMapView::draw()
{
+ LL_PROFILE_ZONE_SCOPED;
static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white);
LLTextureView::clearDebugImages();
@@ -412,8 +416,9 @@ void LLWorldMapView::draw()
drawMipmap(width, height);
// Draw per sim overlayed information (names, mature, offline...)
- for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
- it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
+ static LLCachedControl<bool> show_for_sale(gSavedSettings, "MapShowLandForSale");
+ LLWorldMap::sim_info_map_t::const_iterator end = LLWorldMap::instance().getRegionMap().end();
+ for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin(); it != end; ++it)
{
U64 handle = it->first;
LLSimInfo* info = it->second;
@@ -422,8 +427,8 @@ void LLWorldMapView::draw()
// Find x and y position relative to camera's center.
LLVector3d rel_region_pos = origin_global - camera_global;
- F32 relative_x = (F32)(rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * mMapScale;
- F32 relative_y = (F32)(rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * mMapScale;
+ F32 relative_x = (F32)(rel_region_pos.mdV[0] * mMapRatio);
+ F32 relative_y = (F32)(rel_region_pos.mdV[1] * mMapRatio);
// Coordinates of the sim in pixels in the UI panel
// When the view isn't panned, 0,0 = center of rectangle
@@ -464,7 +469,7 @@ void LLWorldMapView::draw()
gGL.vertex2f(right, top);
gGL.end();
}
- else if (gSavedSettings.getBOOL("MapShowLandForSale") && (level <= DRAW_LANDFORSALE_THRESHOLD))
+ else if (show_for_sale && (level <= DRAW_LANDFORSALE_THRESHOLD))
{
// Draw the overlay image "Land for Sale / Land for Auction"
LLViewerFetchedTexture* overlayimage = info->getLandForSaleImage();
@@ -500,7 +505,6 @@ void LLWorldMapView::draw()
// Draw the region name in the lower left corner
if (mMapScale >= DRAW_TEXT_THRESHOLD)
{
- LLFontGL* font = LLFontGL::getFont(LLFontDescriptor("SansSerif", "Small", LLFontGL::BOLD));
std::string mesg;
if (info->isDown())
{
@@ -512,7 +516,7 @@ void LLWorldMapView::draw()
}
if (!mesg.empty())
{
- font->renderUTF8(
+ LLFontGL::getFontSansSerifSmallBold()->renderUTF8(
mesg, 0,
(F32)llfloor(left + 3), (F32)llfloor(bottom + 2),
LLColor4::white,
@@ -525,13 +529,19 @@ void LLWorldMapView::draw()
}
}
+ static LLCachedControl<bool> show_infohubs(gSavedSettings, "MapShowInfohubs");
+ static LLCachedControl<bool> show_telehubs(gSavedSettings, "MapShowTelehubs");
+ static LLCachedControl<bool> show_events(gSavedSettings, "MapShowEvents");
+ static LLCachedControl<bool> show_mature_events(gSavedSettings, "ShowMatureEvents");
+ static LLCachedControl<bool> show_adult_events(gSavedSettings, "ShowAdultEvents");
+
// Draw item infos if we're not zoomed out too much and there's something to draw
- if ((level <= DRAW_SIMINFO_THRESHOLD) && (gSavedSettings.getBOOL("MapShowInfohubs") ||
- gSavedSettings.getBOOL("MapShowTelehubs") ||
- gSavedSettings.getBOOL("MapShowLandForSale") ||
- gSavedSettings.getBOOL("MapShowEvents") ||
- gSavedSettings.getBOOL("ShowMatureEvents") ||
- gSavedSettings.getBOOL("ShowAdultEvents")))
+ if ((level <= DRAW_SIMINFO_THRESHOLD) && (show_infohubs ||
+ show_telehubs ||
+ show_for_sale ||
+ show_events ||
+ show_mature_events ||
+ show_adult_events))
{
drawItems();
}
@@ -828,11 +838,12 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i
void LLWorldMapView::drawItems()
{
- bool mature_enabled = gAgent.canAccessMature();
- bool adult_enabled = gAgent.canAccessAdult();
-
- bool show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents");
- bool show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents");
+ static LLCachedControl<bool> show_infohubs(gSavedSettings, "MapShowInfohubs");
+ static LLCachedControl<bool> show_telehubs(gSavedSettings, "MapShowTelehubs");
+ static LLCachedControl<bool> show_events(gSavedSettings, "MapShowEvents");
+ static LLCachedControl<bool> show_mature_events(gSavedSettings, "ShowMatureEvents");
+ static LLCachedControl<bool> show_adult_events(gSavedSettings, "ShowAdultEvents");
+ static LLCachedControl<bool> show_for_sale(gSavedSettings, "MapShowLandForSale");
for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
{
@@ -843,17 +854,17 @@ void LLWorldMapView::drawItems()
continue;
}
// Infohubs
- if (gSavedSettings.getBOOL("MapShowInfohubs"))
+ if (show_infohubs)
{
drawGenericItems(info->getInfoHub(), sInfohubImage);
}
// Telehubs
- if (gSavedSettings.getBOOL("MapShowTelehubs"))
+ if (show_telehubs)
{
drawGenericItems(info->getTeleHub(), sTelehubImage);
}
// Land for sale
- if (gSavedSettings.getBOOL("MapShowLandForSale"))
+ if (show_for_sale)
{
drawGenericItems(info->getLandForSale(), sForSaleImage);
// for 1.23, we're showing normal land and adult land in the same UI; you don't
@@ -865,17 +876,17 @@ void LLWorldMapView::drawItems()
}
}
// PG Events
- if (gSavedSettings.getBOOL("MapShowEvents"))
+ if (show_events)
{
drawGenericItems(info->getPGEvent(), sEventImage);
}
// Mature Events
- if (show_mature)
+ if (show_mature_events && gAgent.canAccessMature())
{
drawGenericItems(info->getMatureEvent(), sEventMatureImage);
}
// Adult Events
- if (show_adult)
+ if (show_adult_events && gAgent.canAccessAdult())
{
drawGenericItems(info->getAdultEvent(), sEventAdultImage);
}
@@ -910,14 +921,12 @@ void LLWorldMapView::drawAgents()
void LLWorldMapView::drawFrustum()
{
// Draw frustum
- F32 meters_to_pixels = mMapScale/ REGION_WIDTH_METERS;
-
F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
- F32 far_clip_pixels = far_clip_meters * meters_to_pixels;
+ F32 far_clip_pixels = far_clip_meters * mMapRatio;
F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );
- F32 half_width_pixels = half_width_meters * meters_to_pixels;
+ F32 half_width_pixels = half_width_meters * mMapRatio;
// Compute the frustum coordinates. Take the UI scale into account.
F32 ctr_x = ((getLocalRect().getWidth() * 0.5f + mPanX) * LLUI::getScaleFactor().mV[VX]);
@@ -978,8 +987,8 @@ LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos )
LLVector3 pos_local;
pos_local.setVec(relative_pos_global); // convert to floats from doubles
- pos_local.mV[VX] *= mMapScale / REGION_WIDTH_METERS;
- pos_local.mV[VY] *= mMapScale / REGION_WIDTH_METERS;
+ pos_local.mV[VX] *= mMapRatio;
+ pos_local.mV[VY] *= mMapRatio;
// leave Z component in meters
diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h
index ebc9c6d738..d4857113f2 100644
--- a/indra/newview/llworldmapview.h
+++ b/indra/newview/llworldmapview.h
@@ -210,6 +210,7 @@ private:
F32 mMapScale;
F32 mTargetMapScale;
+ F32 mMapRatio;
static F32 sMapScaleSetting;
static LLVector2 sZoomPivot;
static LLFrameTimer sZoomTimer;
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index e43143c8c3..d3a872c9d5 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2774,7 +2774,7 @@ even though the user gets a free copy.
label="New Script"
label_selected="New Script"
layout="topleft"
- left="10"
+ left="8"
name="button new script"
top="10"
width="134" />
@@ -2786,16 +2786,28 @@ even though the user gets a free copy.
left_pad="8"
name="button permissions"
width="134" />
- <panel_inventory_object
+ <filter_editor
+ follows="left|top|right"
+ label="Enter filter text"
+ layout="topleft"
+ top="40"
+ left="10"
+ text_pad_left="10"
+ max_length_chars="300"
+ highlight_text_field="true"
+ name="contents_filter"
+ height="23"
+ width="275" />
+ <panel_inventory_object
border="true"
border_visible="true"
bevel_style="in"
follows="left|top|right"
- height="387"
+ height="367"
layout="topleft"
left="10"
name="contents_inventory"
- top="50"
+ top="70"
width="275" />
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 7fe9d0efe5..324e868bd5 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -465,6 +465,24 @@
<menu_item_check.on_click
function="World.AlwaysRun" />
</menu_item_check>
+ <menu_item_check
+ label="Hear Media and Sound from Avatar"
+ name="Hear Media and Sound from Avatar">
+ <menu_item_check.on_check
+ control="MediaSoundsEarLocation" />
+ <menu_item_check.on_click
+ function="Agent.ToggleHearMediaSoundFromAvatar" />
+ </menu_item_check>
+ <menu_item_check
+ label="Hear Voice from Avatar"
+ name="Hear Voice from Avatar">
+ <menu_item_check.on_check
+ control="VoiceEarLocation" />
+ <menu_item_check.on_click
+ function="Agent.ToggleHearVoiceFromAvatar" />
+ <menu_item_call.on_enable
+ control="EnableVoiceChat" />
+ </menu_item_check>
<menu_item_separator/>
<menu_item_check
label="Gestures..."